javax.net.ssl.SSLException: SSLSocketFactory is null SSL异常:SSLSocketFactory为空。

5

我对以下代码有问题...

System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.trustStoreType", "jks");
System.setProperty("javax.net.ssl.keyStore","C:\\ClientKeyStore\\ClientKeyStore.p12");
System.setProperty("javax.net.ssl.trustStore","C:\\ClientKeyStore\\ClientKeyStore.keystore");
System.setProperty("javax.net.debug", "ssl");
System.setProperty("javax.net.ssl.keyStorePassword", "keystorepass");
System.setProperty("javax.net.ssl.trustStorePassword", "truststorepass");

SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
URL url = new URL("https://url.com");
HttpsURLConnection httpCon = (HttpsURLConnection) url.openConnection();
httpCon.setSSLSocketFactory(sslsocketfactory);
OutputStream out=httpCon.getOutputStream();

我尝试使用System.setProperty(key,value)方法设置SSL上下文的信任库、密钥库和其他属性,但是我遇到了以下错误。
javax.net.ssl.SSLException: SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called to create a socket and javax.net.ssl.* properties are not set.

请问有人能帮我解决这个问题吗?


你用了什么代码/设置来实现这个? - Bruno
@Bruno:现在检查一下代码。我已经编辑了帖子。 - Bharath ABK
在属性设置之前,您之前是否调用过 SSLSocketFactory.getDefault() 函数? - user207421
我在设置系统属性之前没有调用过SSLSocketFactory.getDefault()。 - Bharath ABK
2个回答

3
您可以在Windows上尝试使用正斜杠路径:

System.setProperty("javax.net.ssl.keyStoreType", "pkcs12");
System.setProperty("javax.net.ssl.trustStoreType", "jks");
System.setProperty("javax.net.ssl.keyStore","C:/ClientKeyStore/ClientKeyStore.p12");
System.setProperty("javax.net.ssl.trustStore","C:/ClientKeyStore/ClientKeyStore.keystore");
System.setProperty("javax.net.debug", "ssl");
System.setProperty("javax.net.ssl.keyStorePassword", "keystorepass");
System.setProperty("javax.net.ssl.trustStorePassword", "truststorepass");


SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();

这是您所有的代码吗?您的属性看起来很好,我可以使用您的示例创建一个套接字工厂。


我又稍微修改了一下代码。我在设置属性方面没有问题,但即使我设置了属性,SSLSocketFactory对象仍然为空。在服务器端或我的本地系统设置中是否有任何我可以做的事情? - Bharath ABK

0

我在我的WebSphere 8.5 / IBM Java 1.7设置中遇到了这个问题。

在我的情况下,它是由JREs <JRE_HOME>\lib\security\java.security文件引起的。

在我的情况下,该文件内容如下...

ssl.KeyManagerFactory.algorithm=IbmX509
ssl.TrustManagerFactory.algorithm=PKIX

PKIX值看起来有点可疑,所以我将文件中的这行代码更改为...

ssl.TrustManagerFactory.algorithm=IbmX509

当我重新启动WebSphere服务器时,连接就正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接