[
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]