2010-04-09 3 views
11

ich versuche zu einem Webservice über SSL mit Apache Commons Httpclient 3.1, mit diesem zu verbinden:SSLException: HelloRequest durch eine unerwartete Handshake-Nachricht gefolgt

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(); 

Und ich diese Ausnahme erhalten:

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) 

Eine Anfrage an die gleiche URL auf dem gleichen Computer, mit curl, funktioniert gut - und wenn ich die URL ändern, um z https://www.verisign.com, funktioniert es auch in Java. Es scheint also die spezifische Kombination von Java und diesem Host zu sein, kein allgemeines Problem.

Ubuntu 10.04 Beta, Sun JDK 1.6.0_19 (dasselbe Problem in Ubuntu gebündelt OpenJDK 6b18 ~ Pre4).

Irgendwelche Ideen, was schief läuft? Vielen Dank!

+1

Siehe http://www.theregister.co.uk/2009/11/14/ssl_renegotiation_bug_exploited/ für eine Diskussion darüber, warum eine unsichere Neuverhandlung keine langfristige Lösung ist. –

+1

Meine Frage ist, bedeutet dies, dass vor JDK 1.6.0.19, unsichere Neuverhandlung war immer erlaubt? Jetzt mit 1.6.0.19 sind wir gezwungen, unsichere Neuverhandlung manuell zu erlauben? Danke für die Einsicht ... –

+0

Ja, es würde so aussehen. – mseebach

Antwort

5

Wir haben eine webstart Anwendung haben was wegen dieses Problems fehlschlägt. Die Befehlszeilenversion funktioniert beim Hinzufügen erneut:

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

Aber die Webstart-Version scheint dies zu ignorieren, und bis jetzt haben wir keine Möglichkeit, diese Eigenschaft in der Webstart-Version zu setzen.

2

Mindestens die Lösung funktioniert für dieses Problem auch: add „-Dsun.security.ssl.allowUnsafeRenegotiation = true“

Danke sehr sehr sehr viel dafür! Ich habe versucht, Maven Deploy über eine SSL-Verbindung zu verwenden, mit Zertifikaten und ich hatte die gleiche Ausnahme. Jetzt ist es gelöst. Danke noch einmal!

1

Nur um ein paar Updates zu diesem hinzuzufügen - Oracle has this KB that discusses the problem.

Wir sind mit JRE 1.6.0_20 auf Windows 7 gekommen, aber ein Upgrade auf 1.6.0_25 hat das Problem behoben (ich weiß, dass es spätere Versionen gibt, aber im Interesse des Softwaretests testen wir mit einem Reihe von Versionen - das ist das früheste, das wir in die Hand bekommen konnten).

Verwandte Themen