Мне нужно получить доступ к веб-службе через прокси-сервер через 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
.
Заранее большое спасибо за любую информацию, чтобы устранить эти проблемы!