2010-04-09 6 views
11

Estoy intentando conectarse a un servicio web a través de SSL usando Apache Commons HttpClient 3.1, utilizando la siguiente:SSLException: HelloRequest seguido de un mensaje de negociación inesperada

String url = "https://archprod.service.eogs.dk/cvronline/esb/LegalUnitGetSSLServicePort"; 
HttpClient client = new HttpClient(); 
PostMethod post = new PostMethod(url); 
StringRequestEntity entity = new StringRequestEntity(requestXml, "application/soap+xml", "utf-8"); 
post.setRequestEntity(entity); 
client.executeMethod(post); 
String response = post.getResponseBodyAsString(); 

Y consigo esta excepción:

javax.net.ssl.SSLException: HelloRequest followed by an unexpected handshake message 
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1623) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:198) 
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:188) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverHelloRequest(ClientHandshaker.java:286) 
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:114) 
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:525) 
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:465) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884) 
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:746) 
at com.sun.net.ssl.internal.ssl.AppInputStream.read(AppInputStream.java:75) 
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
at java.io.BufferedInputStream.read(BufferedInputStream.java:237) 
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78) 
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106) 
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116) 
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973) 
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735) 
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098) 
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) 
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) 
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) 

Una solicitud a la misma URL en la misma máquina, usando curl, funciona bien, y si cambio la URL a p. Ej. https://www.verisign.com, también funciona bien en Java. Entonces parece ser la combinación específica de Java y ese host, no un problema general.

Ubuntu 10.04 beta, Sun JDK 1.6.0_19 (mismo problema en Ubuntu incluido OpenJDK 6b18 ~ pre4).

¿Alguna idea de lo que está mal? ¡Gracias!

+1

Consulte http://www.theregister.co.uk/2009/11/14/ssl_renegotiation_bug_exploited/ para una discusión sobre por qué permitir una renegociación insegura no es una solución a largo plazo. –

+1

Mi pregunta es, ¿significa esto que siempre JDK 1.6.0.19, la renegociación insegura siempre fue permitida? Ahora, con 1.6.0.19, ¿estamos obligados a permitir la renegociación insegura manualmente? Gracias por la información ... –

+0

Sí, parece que sí. – mseebach

Respuesta

5

Tenemos una aplicación Web Start que falla debido a este problema. La versión de línea de comandos está funcionando nuevamente al agregar:

java.lang.System.setProperty ("sun.security.ssl.allowUnsafeRenegotiation", "true");

Pero la versión webstart parece ignorar esto, y hasta ahora no hemos encontrado la manera de configurar esta propiedad en la versión webstart.

2

Al menos la solución que funcione para este tema, también: añadir "-Dsun.security.ssl.allowUnsafeRenegotiation = true"

Muchas gracias muy mucho para eso! Estaba intentando usar la implementación de maven a través de una conexión SSL, usando certificados y tuve la misma excepción. Ahora está resuelto. ¡Gracias de nuevo!

1

Solo para agregar algunas actualizaciones a esto - Oracle has this KB that discusses the problem.

Nos hemos topado con JRE 1.6.0_20 en Windows 7, pero la actualización a 1.6.0_25 ha resuelto el problema (me doy cuenta de que hay versiones posteriores, sin embargo, en interés de las pruebas de software estamos probando con un gama de versiones: esta es la primera vez que hemos podido poner nuestras manos).

Cuestiones relacionadas