11 Stimmen

SSLException: HelloRequest gefolgt von einer unerwarteten Handshake-Nachricht

Ich versuche, eine Verbindung zu einem Webservice über SSL mit Apache Commons HttpClient 3.1, mit diesem:

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 bekomme diese Ausnahme:

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 dieselbe URL auf demselben Rechner mit curl funktioniert problemlos - und wenn ich die URL z. B. in https://www.verisign.com funktioniert es auch in Java einwandfrei. Es scheint sich also um eine spezifische Kombination von Java und diesem Host zu handeln, nicht um ein allgemeines Problem.

Ubuntu 10.04 beta, Sun JDK 1.6.0_19 (dasselbe Problem bei dem von Ubuntu gebündelten OpenJDK 6b18~pre4).

Irgendwelche Ideen, was falsch läuft? Danke!

5voto

BartH Punkte 51

Wir haben eine Webstart-Anwendung, die an diesem Problem scheitert. Die Befehlszeilenversion funktioniert wieder, wenn man :

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

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

2voto

Dave Punkte 21

Zumindest funktioniert die Lösung auch für dieses Problem: Fügen Sie "-Dsun.security.ssl.allowUnsafeRenegotiation=true" hinzu.

Vielen, vielen Dank dafür! Ich habe versucht, Maven Deploy über eine SSL-Verbindung mit Zertifikaten zu verwenden und hatte die gleiche Ausnahme. Jetzt ist das Problem gelöst. Nochmals vielen Dank!

1voto

mseebach Punkte 951

Das gleiche Problem wie hier, denke ich: http://forums.sun.com/thread.jspa?threadID=5435426

Zumindest funktioniert die Lösung auch für dieses Problem: Fügen Sie "-Dsun.security.ssl.allowUnsafeRenegotiation=true" hinzu.

1voto

Chris J Punkte 29515

Nur um einige Aktualisierungen hinzuzufügen - Oracle hat diese KB, die das Problem erörtert .

Wir hatten Probleme mit JRE 1.6.0_20 unter Windows 7, aber ein Upgrade auf 1.6.0_25 hat das Problem behoben (ich weiß, dass es neuere Versionen gibt, aber im Interesse von Softwaretests testen wir mit einer Reihe von Versionen - dies ist die früheste, die wir in die Hände bekommen haben).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X