javax.net.ssl.SSLException: SSLSocketFactory имеет значение null

У меня проблема со следующим кодом ...

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();

Я попытался установить хранилище доверенных сертификатов, хранилище ключей и другие свойства контекста SSL с помощью метода System.setProperty(key,value), но получаю следующую ошибку.

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.

Может ли кто-нибудь помочь мне с этой проблемой.


person Bharath ABK    schedule 06.06.2012    source источник
comment
Какой код / ​​настройки вы используете для этого?   -  person Bruno    schedule 07.06.2012
comment
@Bruno: Проверьте код сейчас. Я отредактировал пост.   -  person Bharath ABK    schedule 07.06.2012
comment
Вызывали ли вы раньше SSLSocketFactory.getDefault() перед установкой свойств?   -  person user207421    schedule 07.06.2012
comment
Нет, я не вызывал SSLSocketFactory.getDefault () перед установкой свойств системы.   -  person Bharath ABK    schedule 07.06.2012


Ответы (2)


Вы можете попробовать косую черту для путей даже в окнах:

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();

Это весь твой код? Ваши свойства выглядят нормально, и я смог использовать ваш пример для создания фабрики сокетов.

person FGreg    schedule 06.06.2012
comment
Я снова немного изменил код. У меня нет проблем с настройкой свойств, но, несмотря на то, что я установил свойства, объект SSLSocketFactory остается равным нулю. Могу ли я что-нибудь сделать на стороне сервера или в настройках моей локальной системы? - person Bharath ABK; 07.06.2012

У меня была эта проблема с моей настройкой websphere 8.5 / ibm java 1.7.

В моем случае это было вызвано файлом JRE ‹JRE_HOME› \ lib \ security \ java.security.

В моем случае в файле говорилось ...

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

Значение PKIX выглядело подозрительно, поэтому я изменил эту строку файла на ...

ssl.TrustManagerFactory.algorithm=IbmX509

Когда я перезапустил сервер websphere, соединение заработало.

person Michael Shaw    schedule 05.11.2018