Хранилище ключей по умолчанию Java и рукопожатие SSL - PullRequest
0 голосов
/ 23 сентября 2018

Мне нужно получить доступ к веб-службе через прокси-сервер через SSL, и прокси-сервер использует сертификат, выданный третьей стороной.Я импортировал файл сертификата (в формате PEM, содержит 2 сертификата) в

$JAVA_HOME/lib/security/cacerts 

хранилище ключей в моем Dockerfile с keytool, и все работает как положено.Однако, если я хочу использовать пользовательское хранилище ключей, такое как /tmp/mykeystore.jks, я получаю исключение рукопожатия SSL

cause 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

Конечно, параметры Java корректируются в зависимости от хранилища ключей, которое я хочу использовать, например:

-Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts

Импорт также содержимого хранилища ключей cacerts рядом с самим файлом сертификата в хранилище настраиваемых ключей решает проблему, и кажется, что, поскольку мое приложение работает в контейнере Docker, существует своего рода предварительно загруженные доверенные издатели и их открытые ключи вcacerts хранилище ключей контейнеров в моей организации.Если я только импортирую цепочку сертификатов, она не может быть проверена из-за отсутствия издателя в пользовательском хранилище ключей, которое существует в хранилище ключей cacerts.Однако это создает для меня пару вопросов, для которых я был бы признателен, если бы кто-то мог предоставить некоторые идеи:

  • При выполнении запроса в Java с использованием RestTemplate или любого другого http-клиента, это -Djavax.net.ssl.trustStore=$JAVA_HOME/lib/security/cacerts достаточно, чтобы объявить java-объект RestTemplate, чтобы использовать содержимое этого файла в качестве доверенного содержимого, или мне также нужно явно определить это программно, когда я инициализирую RestTemplate?
  • Если я не укажу хранилище ключей для использования, есть ли оно по умолчанию?Я подозреваю, что тогда Java использует $JAVA_HOME/lib/security/cacerts.

Заранее большое спасибо за любую информацию, чтобы устранить эти проблемы!

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