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