https / ssl не работает после url.openConnection (), даже если установлено свойство trustStore - PullRequest
0 голосов
/ 15 октября 2018

У меня странная проблема, связанная с https/ssl.
У меня есть файл cacerts (т.е. хранилище доверенных сертификатов), который содержит сертификат, правильно загруженный с сервера.Я также настраиваю следующие свойства:

System.setProperty("javax.net.ssl.trustStore", getTrustStoreFile());
System.setProperty("javax.net.ssl.trustStorePassword", getSSLPassword());

Это прекрасно работает, когда я подключаюсь к серверу, используя https (шаг A).Теперь проблема заключается в том, что если я поставлю следующую строку перед установкой вышеуказанных свойств , шаг A начнет выдавать исключение.

new URL(url).openConnection();

Исключение составляет:

Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)

Это кажется очень странным.Просто отметьте, что исключение возникает только на шаге A, а не над кодом openConnection().Кажется, openConnection() делает здесь что-то напуганное (кажется, загружает java cacerts по умолчанию и даже устанавливает системные реквизиты после того, как это, кажется, не удостоено чести).
Может кто-нибудь пролить немного света здесь, пожалуйста?

PS: я помещаю код openConnection() для загрузки самого сертификата сервера, используя trustAll хранилище доверенных сертификатов.Итак, мой поток:
* url.openConnection(), connection.getServerCertificates() с пользовательским trustStore для загрузки сертификата.
* Сохранение сертификата в хранилище доверенных сертификатов.
* Установка системных свойств хранилища доверенных сертификатов.
* Использование фактического https/SSL соединения (шагA).
Когда я запускаю этот второй раз (первый запуск помещает сертификат в склад доверенных сертификатов):
after commenting step 1 above -> runs fine
after just having url.openConnection() -> gives exception

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...