You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "sudhish (JIRA)" <ji...@apache.org> on 2016/08/19 22:20:20 UTC

[jira] [Created] (HTTPASYNC-111) SSL issue using SSLIOSessionStrategy and PoolingNHttpClientConnectionManager

sudhish created HTTPASYNC-111:
---------------------------------

             Summary: SSL issue using SSLIOSessionStrategy and PoolingNHttpClientConnectionManager
                 Key: HTTPASYNC-111
                 URL: https://issues.apache.org/jira/browse/HTTPASYNC-111
             Project: HttpComponents HttpAsyncClient
          Issue Type: Bug
    Affects Versions: 4.1.1
            Reporter: sudhish


I am new to this so please pardon (and also educate me) if I am doing this wrong on this board.

I am running on WebSphere application server (v 8.5.1) and Java 1.6 

I found an issue using the async client.. My code looks like this.

Registry<SchemeIOSessionStrategy> sessionStrategyRegistry = RegistryBuilder.<SchemeIOSessionStrategy>create()
		            .register("http", NoopIOSessionStrategy.INSTANCE)
		            .register("https", SSLIOSessionStrategy.getSystemDefaultStrategy())
		            .build();
			 IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
		                .setIoThreadCount(Runtime.getRuntime().availableProcessors())
		                .setConnectTimeout(30000)
		                .setSoTimeout(30000)
		                .build();
			 
			 ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
			
			 PoolingNHttpClientConnectionManager connManager = new PoolingNHttpClientConnectionManager(
		                ioReactor, sessionStrategyRegistry);

			 connManager.setDefaultMaxPerRoute(2);
			 connManager.setMaxTotal(20);
          
			  
		 
	        closeableHttpAsyncClient = HttpAsyncClientBuilder.create()

	                		.setDefaultRequestConfig(RequestConfig.custom()
	                        				.setConnectionRequestTimeout(30000)
	                        				.setConnectTimeout(30000)
	                        			.setSocketTimeout(60000)
	                        			.setCookieSpec(CookieSpecs.IGNORE_COOKIES)
	                        			.build())
	                          .setConnectionManager(connManager)
	                          
	                .build();

When I execute 
Future<HttpResponse> future = closeableHttpAsyncClient.execute(request1, null);

It fails with a
aused by: 
java.security.cert.CertPathValidatorException: The certificate issued by CN=Principal Root CA G2 is not trusted; internal cause is: 
	java.security.cert.CertPathValidatorException: Certificate chaining error
	at com.ibm.security.cert.BasicChecker.<init>(BasicChecker.java:111)
	at com.ibm.security.cert.PKIXCertPathValidatorImpl.engineValidate(PKIXCertPathValidatorImpl.java:176)
	at com.ibm.security.cert.PKIXCertPathBuilderImpl.myValidator(PKIXCertPathBuilderImpl.java:737)
	at com.ibm.security.cert.PKIXCertPathBuilderImpl.buildCertPath(PKIXCertPathBuilderImpl.java:649)
	at com.ibm.security.cert.PKIXCertPathBuilderImpl.buildCertPath(PKIXCertPathBuilderImpl.java:595)
	at com.ibm.security.cert.PKIXCertPathBuilderImpl.engineBuild(PKIXCertPathBuilderImpl.java:356)
	... 25 more
Caused by: 
java.security.cert.CertPathValidatorException: Certificate chaining error
	at com.ibm.security.cert.CertPathUtil.findIssuer(CertPathUtil.java:316)
	at com.ibm.security.cert.BasicChecker.<init>(BasicChecker.java:108)
	... 30 more


My certs are ok. 

Without using Asycn client. When I run using non-async client. It works (working code below). Since I am in WebSphere and it makes it own configurations for SSL. I was forced to use 

SSLConnectionSocketFactory.getSystemSocketFactory() <-- Without this, I get the same error as above. 

CloseableHttpClient client = HttpClients.custom()
		.setSSLSocketFactory(SSLConnectionSocketFactory.getSystemSocketFactory()) // this line is key!
				.build();
		final HttpGet request1 = new HttpGet(Url);

		CloseableHttpResponse resp = client.execute(request1);


I went through all your examples and under the assumption that
SSLCOntext.createSystemDefault() should exhibit the same behaviour as 

SSLConnectionSocketFactory.getSystemSocketFactory() ?.. 

It appears its not?  Am I missing something?





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org