javax.net.ssl.SSLException:SSLSocketFactory为null

时间:2012-06-06 20:41:39

标签: java ssl client-certificates

我遇到以下代码的问题......

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.

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

即使在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();

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

答案 1 :(得分:0)

我的websphere 8.5 / ibm java 1.7安装程序遇到了这个问题。

在我的情况下,这是由JRE \ lib \ security \ java.security文件引起的。

在我看来,文件说...

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

PKIX值看起来可疑,所以我将文件的这一行更改为...

ssl.TrustManagerFactory.algorithm=IbmX509

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