Вызов веб-службы HTTPS, работающий на локальном хосте, не выполняется в тестовой среде за исключением: javax.net.ssl.SSLException: SSLSocketFactory имеет значение null

Мы обращаемся к веб-сервису SOAP через HTTPS. Мы создали несколько сред для разработки, тестирования, принятия пользователем, производства. Основная проблема заключается в том, что наш вызов веб-службы 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.

при попытке установить соединение. Целевой веб-сервис одинаков для разработки и тестирования.

Мы используем IBM Websphere 7.0 в обеих средах. Он использует Java 1.6.

Я заметил, что есть различия в свойствах системы между локальным и тестовым JRE-сервером.

localhost: java.fullversion = JRE 1.6.0 IBM J9 2.4 Windows 7 x86-32 jvmwi3260sr15-20131016_170922 (JIT включен, AOT включен) J9VM - 20131016_170922 JIT - r9_20130920_46510ifx2 GC - GA24_Java6_1112012011

TestServer: java.fullversion = JRE 1.6.0 IBM J9 2.4 Windows Server 2008 amd64-64 jvmwa6460sr15-20131016_170922 (JIT включен, AOT включен) J9VM - 20131016_170922 JIT - r9_20130920_46510ifx2 GC - GA24_221316S6016R6

Мы устанавливаем все необходимые системные свойства для SSL в коде:

String certLoc = Configuration.getString("CERT_LOCATION");

System.setProperty("javax.net.ssl.keyStore", certLoc + "\\certificate.pfx");
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStorePassword", "password");
System.setProperty("javax.net.ssl.trustStore", certLoc + "\\TRUSTSTORE.jks");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStorePassword", "password");

Если я проверяю системные свойства в каждой среде, значения для javax.net.ssl.* установлены строго.

У кого-нибудь были похожие проблемы? Можете ли вы поделиться своим решением со мной?

Благодарю вас!

1 ответ

Поскольку вы работаете в тестовой среде (или в любой системе, удаленной от вашей машины разработки), убедитесь, что ваш код действительно получает правильные значения системных свойств, регистрируя их (возможно, переключая уровни журнала на debug). Возможно, что "пользователь", выполняющий код, имеет другой набор свойств системы / среды выполнения или не установлен вообще.

Если вы подтвердили, что ваши свойства разработки действительно определены в контексте работающего кода в тестовой среде, убедитесь, что существует полный путь к файлу, на который указывают ваши свойства, и ваш код имеет к нему доступ для чтения (особенно в *nix). системы). Кроме того, проверьте, что значение certloc имеет правильные разделители в окружающей среде.

Для большей переносимости при построении значений пути строки, рассмотрите возможность использования file.separator а также path.separator что вы можете извлечь из System.properties https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html.

Другие вопросы по тегам