SSLPeerUnverifiedException: peer не аутентифицирован
Но опять-таки скучная проблема SSLPeerUnverified, но я не использую самоподписанные сертификаты.
Я пытаюсь подключиться к хосту с помощью https. У этого хоста есть правильный сертификат, ни у Firefox, ни у HttpsUrlConnection нет никаких проблем с ним.
Однако, пытаясь подключиться с помощью HttpClient, я получаю страшное исключение.
Любые подсказки? Или подскажите, где искать ближе?
Спасибо!
Изменить: Отладочный вывод
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
main, IOException в getSession():
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
Ответы
Ответ 1
Кажется, что вам нужно импортировать сертификат в доверенное хранилище ключей, которое использует JVM. Если вы не используете другое доверенное хранилище ключей в своем приложении, это будет "cacerts".
Вы можете выполнить пошаговое руководство по адресу Как исправить 'SSLPeerUnverifiedException: peer not authenticated' Exception in Groovy/Java".
Краткая версия:
-
Выполните следующую команду, замените $ADDRESS
на URL, минус "https://":
echo -n | openssl s_client -connect $ADDRESS:443 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$ADDRESS.cert
-
Выполните следующую команду, замените $ALIAS
короткое имя ключа, $ADDRESS
на имя сертификата сверху, $PATH
на путь к cacerts в вашей JRE.
sudo keytool -importcert -alias "$ALIAS" -file /tmp/$ADDRESS.cert \
-keystore $PATH/cacerts -storepass changeit
Ответ 2
Ссылка на предыдущий ответ не работает, поэтому я добавляю дополнительно:
https://blogs.oracle.com/java-platform-group/entry/self_signed_certificates_for_a