[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1446?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski resolved HTTPCLIENT-1446.
-------------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.3.2

Fixed in SVN trunk and 4.2.x branch. Please review / re-test

Oleg

> Proxy authentication Error - NTLM authentication error: Unexpected state: 
> MSG_TYPE3_GENERATED in Http Client 4.3.1
> ------------------------------------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1446
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1446
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.3.1
>         Environment: Windows 7
>            Reporter: Carina Lansing
>             Fix For: 4.3.2
>
>         Attachments: httpDebugTrace.txt
>
>
> We are using httpclient 4.3.1, trying to connect to a website that requires 
> basic authentication through an NTLM v2 proxy.  It appears that the proxy 
> authentication is successfully negotiated, but then when trying to process 
> the challenge from the target web site in the next pass, the NTLMScheme is 
> throwing this exception at line  147?  We are instantiating our http client 
> via the snippet shown below.  Attached is a debug trace of the HttpGet  
> operation.
> -----------------------------------------------------------------------------------
>     ConnectionConfig connectionConfig = ConnectionConfig.custom()
>         .setMalformedInputAction(CodingErrorAction.IGNORE)
>         .setUnmappableInputAction(CodingErrorAction.IGNORE)
>         .setCharset(Consts.UTF_8)
>         .setMessageConstraints(MessageConstraints.DEFAULT)
>         .build();
>     
>     this.connManager = new PoolingHttpClientConnectionManager();
>     // Configure the connection manager to use connection configuration
>     this.connManager.setDefaultConnectionConfig(connectionConfig);
>     // Configure total max or per route limits for persistent connections
>     // that can be kept in the pool or leased by the connection manager.
>     this.connManager.setMaxTotal(30);
>     this.connManager.setDefaultMaxPerRoute(30);
>     // Create global request configuration
>     this.defaultRequestConfig = RequestConfig.custom()
>         .setCookieSpec(CookieSpecs.BEST_MATCH)
>         .setExpectContinueEnabled(true)
>         .setStaleConnectionCheckEnabled(true)
>         .setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC))
>         .setProxyPreferredAuthSchemes(Arrays.asList(AuthSchemes.BASIC, 
> AuthSchemes.NTLM))
>         .build();
> .....
>     // Set the route planner with our Proxy Selector which should 
> auto-determine the proxy settings
>     SystemDefaultRoutePlanner routePlanner = new 
> SystemDefaultRoutePlanner(ProxyConfig.getProxySelector());
>     // Use custom credentials provider to set credentials for server and proxy
>     CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
>     
>     // Set credentials for velo server
>     credentialsProvider.setCredentials(
>         new AuthScope(this.server, this.port), // velo server and port (i.e., 
> akuna.labworks.org:80)
>         new UsernamePasswordCredentials(username, password));
>     // Set credentials for proxy
>     if(ProxyConfig.getHost() != null && ProxyConfig.getProxyUsername() != 
> null) {
>       // basic scheme
>       credentialsProvider.setCredentials(
>           new AuthScope(ProxyConfig.getHost(), ProxyConfig.getPort(), new 
> BasicScheme().getSchemeName()),
>           new UsernamePasswordCredentials(ProxyConfig.getProxyUsername(), 
> ProxyConfig.getProxyPassword()));       
>       // NTLM scheme
>       credentialsProvider.setCredentials(
>           new AuthScope(ProxyConfig.getHost(), ProxyConfig.getPort(), 
> AuthScope.ANY_REALM, new NTLMScheme().getSchemeName()),
>           new NTCredentials(ProxyConfig.getProxyUsername(), 
> ProxyConfig.getProxyPassword(),
>               ProxyConfig.getClientMachine(), 
> ProxyConfig.getClientDomain()));  
>     }
>     
>     // Configure for https
>     SSLConnectionSocketFactory sslsf = new 
> SSLConnectionSocketFactory(sslContext,
>         SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
>     
>     // Create an HttpClient with the given custom dependencies and 
> configuration.
>     CloseableHttpClient httpclient = HttpClients.custom()
>         .setConnectionManager(this.connManager)
>         .setDefaultCredentialsProvider(credentialsProvider)
>         //         .setProxy(new HttpHost("myproxy", 8080)) // don't need to 
> set proxy since routePlanner should do it
>         .setRoutePlanner(routePlanner)
>         .setDefaultRequestConfig(this.defaultRequestConfig)
>         .setSSLSocketFactory(sslsf)
>         .build();



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to