web-dev-qa-db-fra.com

SoapUI ne parvient pas à se connecter HTTPS (SSLPeerUnverifiedException)

Je dois tester le service Web en cours de déploiement dans un environnement de pré-version déployé sur un système d'extrémité HTTPS. Malheureusement, SoapUI échoue avec une exception SSLPeerUnverifiedException: peer not authenticated. J'ai utilisé les deux versions 4.6.4 et 5.0 très fraîche.

Env:

le point final est https, certificat startcom, le réseau utilise un proxy (même problème sans proxy avec un réseau différent)

J'ai passé de nombreuses heures, peut-être une journée à chercher une solution sur Google. En particulier, ce lien semblait prometteur: https://forum.soapui.org/viewtopic.php?f=13&t=20866

J'ai extrait le certificat de point de terminaison via firefox et l'ai laissé faire confiance. J'ai donc modifié cacerts à partir de l'installation de la machine virtuelle Java de soapui:

..\SoapUI-4.6.4\jre\lib\security>keytool -import -alias HOSTNAME 
-file endpoint.crt -keystore cacerts -storepass changeit

Redémarrez puis retesté - échec.

Ensuite, j'ai adopté une approche différente et laissé la JVM SoapUI faire confiance à tous les certificats StartCom.

keytool -import -trustcacerts -alias startcom.ca -file ca.crt -keystore cacerts
keytool -import -alias startcom.ca.sub -file sub.class1.server.ca.crt -keystore cacerts

Redémarrez et a échoué à nouveau. Que dois-je faire maintenant?

MODIFIER

2014-05-30 08:39:53,782 ERROR [errorlog] javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at Sun.security.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source)
at org.Apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.Java:128)
at org.Apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.Java:446)
at org.Apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.Java:499)
at com.eviware.soapui.impl.wsdl.support.http.SoapUISSLSocketFactory.createLayeredSocket(SoapUISSLSocketFactory.Java:268)
at org.Apache.http.impl.conn.DefaultClientConnectionOperator.updateSecureConnection(DefaultClientConnectionOperator.Java:200)
at org.Apache.http.impl.conn.AbstractPoolEntry.layerProtocol(AbstractPoolEntry.Java:277)
at org.Apache.http.impl.conn.AbstractPooledConnAdapter.layerProtocol(AbstractPooledConnAdapter.Java:142)
at org.Apache.http.impl.client.DefaultRequestDirector.establishRoute(DefaultRequestDirector.Java:758)
at org.Apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.Java:565)
at org.Apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.Java:415)
at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:820)
at org.Apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.Java:754)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport$Helper.execute(HttpClientSupport.Java:238)
at com.eviware.soapui.impl.wsdl.support.http.HttpClientSupport.execute(HttpClientSupport.Java:348)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.submitRequest(HttpClientRequestTransport.Java:318)
at com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport.sendRequest(HttpClientRequestTransport.Java:232)
at com.eviware.soapui.impl.wsdl.WsdlSubmit.run(WsdlSubmit.Java:123)
at Java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at Java.util.concurrent.FutureTask.run(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

Débogage SSL:

adding as trusted cert:
Subject: CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
Issuer:  CN=StartCom Certification Authority, OU=Secure Digital Certificate Signing, O=StartCom Ltd., C=IL
Algorithm: RSA; Serial number: 0x1
Valid from Sun Sep 17 21:46:36 CEST 2006 until Wed Sep 17 21:46:36 CEST 2036

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
Thread-20, WRITE: TLSv1 Handshake, length = 186
Thread-20, READ: TLSv1 Alert, length = 2
Thread-20, RECV TLSv1 ALERT:  warning, unrecognized_name
SSL - handshake alert: unrecognized_name
Thread-20, handling exception: javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name
Thread-20, SEND TLSv1 ALERT:  fatal, description = unexpected_message
Thread-20, WRITE: TLSv1 Alert, length = 2
Thread-20, called closeSocket()
Thread-20, IOException in getSession():  javax.net.ssl.SSLProtocolException: handshake alert:  unrecognized_name
09:16:12,482 ERROR [WsdlSubmit] Exception in request: javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
6
Leos Literak

Pour tous ceux qui utilisent un Mac à la recherche de la même réponse (désolé, cela ne me permet pas de commenter la réponse sélectionnée car je n'ai pas encore assez de points de réputation à commenter !!!) . Cela n’a aucun impact si vous lancez l’application en cliquant sur l’icône dans votre dossier Applications ou en utilisant Spotlight.

/Applications/SoapUI-5.0.0.app/Contents

Editez vmoptions.txt et ajoutez -Dcom.Sun.net.ssl.checkRevocation = false au bas du fichier. Enregistrez et relancez. 

5
bawinnicki

Je pense que vous faites les choses bien. Si vous chargez le certificat de serveur sur votre truststore, la connexion doit fonctionner, il se peut que quelque chose se passe, par exemple une redirection. Si vous le souhaitez, vous pouvez essayer de désactiver la validation du certificat du serveur SSL. Si vous utilisez une version autonome SOAPUI, éditez le $SOAPUI_HOME/bin/soapui.bat ou le $SOAPUI_HOME/bin/soapui.sh et ajoutez ce paramètre -Dcom.Sun.net.ssl.checkRevocation=false comme option Java:

soapui.bat

set Java_OPTS=%Java_OPTS% -Dcom.Sun.net.ssl.checkRevocation=false

soapui.sh

Java_OPTS="$Java_OPTS -Dcom.Sun.net.ssl.checkRevocation=false"

J'espère que cela t'aides,

4
albciff

Assurez-vous également que vous êtes ne pas exécuter Fiddler, qui essaiera d'agir en tant que proxy pour toutes les demandes formulées par SoapUI. Si vous souhaitez que cela fonctionne avec Fiddler, vous devez ajouter le certificat racine Fiddler à votre magasin de clés de confiance Java.

Voir aussi: SoapUI ne fonctionne pas avec fiddler pour les tests de service REST

2
franzjaeger

Je recevais aussi le message suivant:

Error getting response; javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

Le problème que j'ai eu était uniquement lorsque vous passez par un serveur proxy. Connecté directement à Internet sans proxy fonctionnait.

J'ai essayé toutes ces solutions et aucune ne fonctionnait. 

J'ai même essayé d'ajouter les certificats d'autorité de certification sécurisés dans un magasin de clés Java sous WS-Security-Configurations -> Truststores et je continuais à recevoir le message d'erreur. 

Je suis passé à SoapUI 5.2.1 et le problème est maintenant résolu.

Cela vaut peut-être la peine de l'essayer.

2
StephaneD

Si vous utilisez un proxy, essayez de le contourner (via ProxySettings, les préférences de SoapUI).

2
NevinJ