2012-10-18 12 views
10

Jeszcze raz, ponury problem z SSLPeerUnverified, ale nie używam certyfikatów z podpisem własnym. Próbuję połączyć się z hostem za pomocą protokołu HTTPS. Ten host ma poprawny certyfikat, ani Firefox, ani HttpsUrlConnection nie mają z nim żadnych problemów. Jednak próbując połączyć się przy użyciu HttpClient, otrzymuję wyjątek budzący lęk.SSLPeerUnverifiedException: peer not authenticated

Jakieś wskazówki? Albo wskazówka gdzie się bliżej przyjrzeć?

Dzięki!

Edit: Debug wyjście

główne, obsługa wyjątków:

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 

główny, IOException w metodę 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 

Odpowiedz

24

Wydaje się, że trzeba importować certyfikatu do zaufany magazyn kluczy używany przez maszynę JVM. Jeśli nie używasz innego zaufanego magazynu kluczy w swojej aplikacji, będzie to "cacerts".

Możesz wykonać krok po kroku pod "How to Fix 'SSLPeerUnverifiedException: peer not authenticated' Exception in Groovy/Java".

Krótka wersja:

  1. Uruchom następujące polecenie, wymień $ADDRESS z adresem URL, minus "https: //":

    echo -n | openssl s_client -connect $ADDRESS:443 | \ 
        sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$ADDRESS.cert 
    
  2. Uruchom następujące polecenie, a zastąpić $ALIAS krótka nazwa klucza, $ADDRESS z nazwą certyfikatu z powyższego, $PATH ze ścieżką do cacerts w twoim środowisku JRE.

    sudo keytool -importcert -alias "$ALIAS" -file /tmp/$ADDRESS.cert \ 
        -keystore $PATH/cacerts -storepass changeit 
    
+0

2 dni cierpienia zakończony tą odpowiedź. Weź swój głos na dobrego człowieka. –

Powiązane problemy