刚开始的代码如下:
SSLContext sslContext = SSLContext.getInstance("SSL");
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
new String[] {"TLSv1"}, null,SSLConnectionSocketFactory.getDefaultHostnameVerifier());
执行后异常:
java.lang.IllegalStateException: SSLContextImpl is not initialized
at sun.security.ssl.SSLContextImpl.engineGetSocketFactory(SSLContextImpl.java:172)
at javax.net.ssl.SSLContext.getSocketFactory(SSLContext.java:294)
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<init>(SSLConnectionSocketFactory.java:275)
解决办法如下:
SSLContextBuilder sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
return true;
}
});
SSLContext sslContext =sslContextBuilder.build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext,
new String[]{"TLSv1.1", "SSLv3", "TLSv1", "TLSv1.2"},
null, NoopHostnameVerifier.INSTANCE);
博客内容讲述了在Java中遇到`SSLContextImpl is not initialized`异常的场景。初始代码尝试初始化SSLContext但失败,导致异常。解决方法是使用SSLContextBuilder并自定义TrustStrategy,允许所有证书。修改后的代码成功创建了SSLConnectionSocketFactory,支持TLSv1.1到TLSv1.2。
2280

被折叠的 条评论
为什么被折叠?



