Jettyを埋め込んだアプリケーションがあります。SSLでクライアント証明書認証を使用したいのですが、それを有効にすると、リクエストの開始時に次の例外が発生します。しかし、その後、リクエストは適切に処理されています。この例外は、IEまたはChromeからアクセスした場合にのみ発生します。Firefoxからアクセスした場合は表示されません。SslSocketConnectorを拡張するカスタムSSLConnectorがあります。私はそれをデバッグしようとしています。しかし、私がチェックを開始できる特定の場所/コードがあるかどうかを知りたいと思いました。
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に更新し、2つのプロパティを有効/無効にして試してみました。それでも同じ振る舞いをします。
詳細: TLSv1とSSLv3はすべてのブラウザで有効になっています。client-authを有効にしなくても、通信は正しく行われています。クライアント認証では、最初のハンドシェイクで常に例外が発生し、次のハンドシェイクは適切に実行され、例外なく続行されます。サーバー側でjettyバージョン6.1.14を使用