HTTPClient is not using Protocol configured in HostConfiguration when using 
mutual Auth in connections
------------------------------------------------------------------------------------------------------

                 Key: HTTPCLIENT-744
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-744
             Project: HttpComponents HttpClient
          Issue Type: Bug
          Components: HttpClient
    Affects Versions: 3.1 Final
            Reporter: Endrigo Antonini
            Priority: Critical


I'm using HTTClient to access a WS which  are using mutual authentication.
So I have to "create" a https protocol that will do the Handshake process.

Every example that I found on Internet, it was registering this protocol as the 
default protocol of HTTPS connections, but in my system this is a big problem, 
because i'm connecting others https urls that are not using mutual 
authentication. Example: 
Protocol.registerProtocol("https", myprotocol);

So I found a way to set the Protocol in the HostConfiguration doing like this:
SecureProtocolSocketFactory auth = new 
AuthSSLProtocolSocketFactory(file.toURI().toURL(), pass, null, null);
Protocol trustHttps = new Protocol(url, (ProtocolSocketFactory) auth, 
certificate.getPort());
HostConfiguration hostConfiguration = new HostConfiguration();
hostConfiguration.setHost(url, certificate.getPort(), trustHttps);
httpclient.execute(hostConfiguration,method);

But i was still having the problem.

I found inside class HTTClient the error.
It's on the method "executeMethod(HostConfiguration hostconfig,  final 
HttpMethod method, final HttpState state)" on line "hostconfig.setHost(uri)".
If you trace the method setHost(URI), you will see that this method is getting 
the standard protocol (that is register in Protocol) to access this url.

I fixed this problem changing this part of the code to:
            hostconfig = (HostConfiguration) hostconfig.clone();
            if (hostconfig.getProtocol() == null) {
              if (uri.isAbsoluteURI()) {
                  hostconfig.setHost(uri);
              }
            } else {
                int port = uri.getPort();
                if (port <= 0) port = hostconfig.getProtocol().getDefaultPort();
                
                hostconfig.setHost(uri.getHost(), uri.getPort(), 
hostconfig.getProtocol());
            }

This solution it's running in my system and it's working.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to