2012-10-18 10 views
10

Ancora una volta, il triste Problema di SSLPeerUnverified, ma non sto usando certificati autofirmati. Provo a connettermi a un host usando https. Questo host ha un certificato corretto, né Firefox né HttpsUrlConnection hanno problemi con esso. Tuttavia, provando a connetterti usando HttpClient, ottengo l'eccezione temuta.SSLPeerUnverifiedException: peer non autenticato

Eventuali indizi? O consiglio dove guardare più da vicino?

Grazie!

Edit: Debug uscita

principale, gestione delle eccezioni:

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 

principale, IOException in 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 

risposta

24

Sembra che è necessario importare il certificato nel il keystore affidabile utilizzato da JVM. Se non si utilizza un altro keystore attendibile nell'applicazione, questo sarà "cacerts".

È possibile seguire una guida passo-passo a "How to Fix 'SSLPeerUnverifiedException: peer not authenticated' Exception in Groovy/Java".

Versione corta:

  1. Eseguire il seguente comando, sostituire $ADDRESS con l'URL, meno la "https: //":

    echo -n | openssl s_client -connect $ADDRESS:443 | \ 
        sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/$ADDRESS.cert 
    
  2. Eseguire il seguente comando, sostituire $ALIAS un nome breve per la chiave, $ADDRESS con il nome cert sopra, $PATH con il percorso di cacerts nel JRE.

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

2 giorni di sofferenza è conclusa con questa risposta. Prendi il tuo voto, buon uomo. –

Problemi correlati