Ausnahme zu Beginn der Anfrage - SSL-ClientAuth
Ich habe eine Anwendung einbetten Steg. Ich möchte mit client-cert-Authentifizierung von SSL-und wenn ich Sie aktivieren aus, ich bin immer folgende exception beim starten der Anfrage. Aber der Wunsch ist immer diente ordnungsgemäß nach. Diese Ausnahme kommt nur, wenn der Zugriff über IE oder Chrome. Es kommt nicht, wenn der Zugriff von Firefox. Wir haben unsere benutzerdefinierte SSLConnector erweitern SslSocketConnector. Ich bin versucht zu Debuggen, aber wollte wissen, ob es einen bestimmten Ort/code, wo ich anfangen kann zu prüfen.
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:808)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
at org.mortbay.jetty.security.SslSocketConnector$SslConnection.run(SslSocketConnector.java:631)
at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at com.sun.net.ssl.internal.ssl.InputRecord.read(InputRecord.java:333)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:789)
Update:
Ich SSL aktiviert debug-option und war es immer diese Ausnahme, die auf eine lese-unmittelbar nach der ServerHelloDone-Nachricht. Dies ist die Nachricht, in der server sendet seinen cert zusammen mit der Anfrage für client-Zertifikat, glaube ich. Ich bin nicht sicher, was passiert in den ersten gelesen. Jede Hilfe wird zutiefst geschätzt.
*** ClientHello, TLSv1
****
%% Created: [Session-1, TLS_RSA_WITH_AES_128_CBC_SHA]
*** ServerHello, TLSv1
*** Certificate chain
***
*** CertificateRequest
Cert Types: RSA, DSS
Cert Authorities:
*** ServerHelloDone
WRITE: TLSv1 Handshake, length = 703
received EOFException: error
handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Update:
Aktualisiert JDK spätestens 23 und habe versucht mit den beiden Eigenschaften aktiviert/deaktiviert werden. Noch gettting das gleiche Verhalten.
Mehr info:
TLSv1 und SSLv3 aktiviert sind, wird in allen Browsern. Die Kommunikation geschieht ohne die richtige client-auth aktiviert. Mit client-auth, immer bekommen wir Ausnahme auf den ersten händedruck und der nächste ist immer richtig gemacht und fortfahren, ohne Ausnahmen. Mit der jetty-version 6.1.14 auf server-Seite
javax.net.debug
system-Eigenschaft auf all
oder debug
. Für die meisten java-Trägerraketen, die Sie gerade hinzufügen -Djavax.net.debug=alle " Argumente.InformationsquelleAutor vpram86 | 2011-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gesehen, Probleme wie diese mit TLS/SSLv3 Verhandlung.
http://www.oracle.com/technetwork/java/javase/documentation/tlsreadme2-176330.html
Wenn das immer noch nicht hilft, können Sie versuchen, die Aktivierung von SSL dedug, und nehmen Sie einen Blick auf die handshaking.
-Djavax.net.debug=all
dies wäre der Weg, um hinzufügen: System.setProperty("sun.Sicherheit.ssl.allowUnsafeRenegotiation", "true"); System.setProperty("sun.Sicherheit.ssl.allowLegacyHelloMessages", "true");
InformationsquelleAutor Dan
Bekam ich, als ich versehentlich die nicht-ssl-port in der URL, sondern begann die URL mit https. Doh.
Manchmal sind die einfachsten Lösungen sind diejenigen, die wir vergessen!
InformationsquelleAutor Paul Hilliar
Versuchen die neueste jdk. Sie fixiert einen ssl-handshake-Fehler. http://www.java.net/blogs/kumarjayanti/
InformationsquelleAutor Hiro2k
Ich immer noch denke, das ist eine TLS/SSL-Handshake-Problem.
Nachdem Sie stellte die debug-info, zeigt es, du machst einen TLSv1 Handshake.
Sind Sie sicher, dass Sie TLSv1 aktiviert in Ihrem Browser?
Chrome:
Damit aktivieren Sie TLS 1.0 in chrome machen Sie Folgendes:
IE:
Firefox:
Du dann auch erwähnen, dass:
Haben Sie das client-Zertifikat installiert in jedem web-Browser Sie testen aus?
Stellen Sie sicher, Sie können alles bekommen, was das arbeiten ohne gegenseitige/client-Authentifizierung zuerst, und dann, wenn seine arbeiten, fügen Sie es wieder in.
Ich glaube, Sie brauchen, um genauer zu sein mit dem, was du meinst mit dem 'ersten mal' und 'zweiten Zeit'. Meinst du wie offenbar von der client-Seite oder server-Seite? Außerdem erfassen Sie die gesamte Ausgabe mit javax.net.debug=alle aus dem ersten Lauf und dann der zweite Lauf, in Dateien. Streifen aus dem Zeitstempel (perl, text-editor, Makros usw). Und dann diff auf die beiden Dateien nebeneinander und suchen Sie nach großen Unstimmigkeiten. Ich würde gerne wissen, ob der client präsentiert eine identische client-Zertifikat (fingerprint/hash) auf die Anforderung fehl, und der Wunsch, dass es gelingt.
Debug aktiviert wurde, wird im server-Seite. Wenn wir versuchen, öffnen Sie ein link auf dem server; dieses Verhalten wird auftreten, noch bevor die client-Zertifikat-Auswahl-Fenster. Aus der Sicht der Nutzer, Sie werden keinen Unterschied sehen, aber tatsächlich ist Sie angeschlossen, nur in der zweiten handshake. Ich verwendet ssltap auch für traffic. Ich werde versuchen die logs von ssltap und irgendwo verlinken. Soweit ich sehen kann sind Sie fast gleich. Aber ich könnte etwas fehlen.
InformationsquelleAutor Dan