我有一個嵌入Jetty的應用程序。我希望在SSL中使用客戶端證書身份驗證,並在啓用時進行驗證;我在請求開始時收到以下異常。但是這個請求在那之後得到了正確的處理。只有從IE或Chrome訪問時纔會出現此異常。它從Firefox訪問時不會來。我們有我們的定製SSLConnector擴展SslSocketConnector。我正在嘗試調試它;但想知道是否有任何特定的地方/代碼可以開始檢查。請求開始時出現異常 - ClientAuth SSL
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)
更新:
我啓用SSL調試選項,並獲得在該異常的ServerHelloDone消息後立即讀取。這是服務器發送證書的消息,以及我相信客戶端證書的請求。我不確定最初閱讀中發生了什麼。任何幫助深表謝意。
*** 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
更新: 更新JDK到最新的,23並試圖啓用/禁用這兩個特性。仍然得到相同的行爲。
更多信息: TLSv1和SSLv3已在所有瀏覽器中啓用。沒有啓用client-auth,通信正常發生。通過客戶端身份驗證,我們總是會在第一次握手時得到例外,而下一次正確地完成並繼續進行,沒有例外。在服務器端使用碼6.1.14版
正如@Dan所說,您需要將`javax.net.debug`系統屬性設置爲`all`或`debug`。對於大多數Java發射器,只需將-Djavax.net.debug = all`添加到參數中即可。 – 2011-01-29 23:24:54