У меня есть приложение, встраивающее Jetty. Я хотел бы использовать аутентификацию сертификата клиента в SSL и когда я включаю это; Я получаю следующее исключение в начале запроса. Но после этого запрос обслуживается должным образом. Это исключение возникает только при доступе из IE или Chrome. Не приходит при доступе из Firefox. У нас есть собственный SSLConnector, расширяющий SslSocketConnector. Я пытаюсь его отладить; но хотел знать, есть ли какое-то конкретное место/код, где я могу начать проверку.
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 включены во всех браузерах. Связь происходит правильно без включенной аутентификации клиента. С клиентской аутентификацией мы всегда получаем исключение при первом рукопожатии, а следующее выполняется должным образом и выполняется без исключений. Использование причала версии 6.1.14 на стороне сервера
javax.net.debug
значениеall
илиdebug
. Для большинства средств запуска Java вы просто добавляете -Djavax.net.debug=all` к аргументам. - person President James K. Polk   schedule 30.01.2011