【发布时间】:2014-07-13 06:00:28
【问题描述】:
我知道之前有人问过这个问题,但我尝试了所有找到的解决方案,但仍然无法正常工作。
基本上,我正在尝试通过 Apache Http Client (4.3) 获取一些内容,而我正在连接的网站存在一些 SSL 问题。
首先,我收到了 SSLException 和 unrecognized_name 消息。我试图通过将jsse.enableSNIExtension 属性设置为false 来解决这个问题。
然后,我得到了这个异常:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
然后我尝试提供我赢得的SSLFactory,它将接受所有证书,但我仍然遇到同样的异常。这是我的代码:
private static void sslTest() throws Exception {
System.setProperty("jsse.enableSNIExtension", "false");
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
.useTLS()
.build();
SSLConnectionSocketFactory connectionFactory =
new SSLConnectionSocketFactory(sslContext, new AllowAllHostnameVerifier());
CookieStore cookieStore = new BasicCookieStore();
HttpClientContext context = HttpClientContext.create();
context.setCookieStore(cookieStore);
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(connectionFactory)
.setDefaultCookieStore(cookieStore)
.build();
URI uri = new URIBuilder()
.setScheme("https")
.setHost(BASE_URL)
.build();
String responseBody = httpclient.execute(new HttpGet(uri), RESPONSE_HANDLER);
}
非常感谢所有帮助!
【问题讨论】:
-
请看我另一个问题的回答:stackoverflow.com/a/45734000/8477758
标签: java ssl https httpclient apache-httpclient-4.x