SoapUI no puede conectar HTTPS (SSLPeerUnverifiedException)

Necesito probar el servicio web que se está implementando en el entorno previo al lanzamiento que se implementa en el punto final HTTPS. Desafortunadamente, SoapUI falla con SSLPeerUnverifiedException: peer not authenticated excepción SSLPeerUnverifiedException: peer not authenticated . Utilicé ambas versiones 4.6.4 y 5.0 muy frescas.

Env:

el punto final es https, certificado de inicio, la red usa proxy (pero el mismo problema sin proxy con una red diferente)

He pasado muchas horas, tal vez un día buscando una solución en Google. Especialmente este enlace parecía prometedor: https://forum.soapui.org/viewtopic.php?f=13&t=20866

Extraí el certificado de punto final a través de Firefox y lo dejé confiar. Así que modifiqué cacerts de la instalación JVM de soapui:

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

Reinicie y luego vuelva a probar – falla.

Luego adopté un enfoque diferente y dejé que SoapUI JVM confiara en todos los certificados de 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 

Reinicie y falló de nuevo. ¿Qué más debo hacer ahora?

EDITAR

 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) 

Depuración 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 

Ok, la solución para este problema es establecer

 -Djsse.enableSNIExtension=false 

en $SOAPUI_HOME/bin/soapui.bat

El motivo se describe en esta respuesta: https://stackoverflow.com/a/14884941/1639556

Digerir:

Java 7 introdujo el soporte de SNI que está habilitado de forma predeterminada. Descubrí que ciertos servidores mal configurados envían una advertencia de “Nombre no reconocido” en el protocolo SSL que la mayoría de los clientes ignoran … excepto Java.

Actualización : para SoapUI 5.2.1 tuve que alterar un archivo SoapUI-5.2.1.vmoptions porque la modificación del archivo bat no ayudó.

Para cualquier persona que use una Mac en busca de la misma respuesta (lo siento, no me deja comentar sobre la respuesta seleccionada porque aún no tengo suficientes puntos de reputación para comentar). La edición de soapui.sh no tendrá ningún impacto si está iniciando la aplicación haciendo clic en el icono en su carpeta de Aplicaciones o usando Spotlight.

/Aplicaciones/SoapUI-5.0.0.app/Contentos

Edite vmoptions.txt y agregue -Dcom.sun.net.ssl.checkRevocation = false al final del archivo. Guarde y vuelva a iniciar.

Creo que estas haciendo las cosas bien. Si carga el certificado del servidor en su almacén de confianza, la conexión debe funcionar, tal vez algo esté sucediendo como, por ejemplo, una redirección. Si lo desea, puede intentar deshabilitar la validación del certificado del servidor SSL. Si usa una versión independiente de SOAPUI, edite $SOAPUI_HOME/bin/soapui.bat o $SOAPUI_HOME/bin/soapui.sh y agregue este parámetro -Dcom.sun.net.ssl.checkRevocation=false como opción de 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"

Espero que esto ayude,

Si está utilizando un proxy, intente omitir el mismo (a través de ProxySettings es SoapUI Preferences)

También asegúrese de que no está ejecutando Fiddler , que intentará actuar como un proxy para cualquier solicitud realizada por SoapUI. Si desea que funcione con Fiddler, debe agregar el certificado raíz de Fiddler a su almacén de confianza de Java.

Ver también: SoapUI no funciona con fiddler para pruebas de servicio REST

También estaba recibiendo el siguiente mensaje:

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

El problema que tuve fue solo cuando iba a través de un servidor proxy. Conectado directamente a internet sin un proxy funcionaba.

Probé todas estas soluciones, y ninguna estaba funcionando.

Incluso intenté agregar los certificados de CA confiables en un almacén de claves Java bajo Configuraciones de seguridad WS -> Almacenes de confianza y todavía estaba obteniendo el error.

Actualicé a SoapUI 5.2.1 y el problema ahora está resuelto.

Puede valer la pena para que lo pruebes.