У меня Tomcat 7.0.12 с использованием APR и OpenSSL. Кажется, все работает нормально, но я вижу некоторые NullPointerException
следы стека появляются в журналах. Насколько я могу судить, это происходит всякий раз, когда клиент подключается, инициирует рукопожатие TLS, получает сертификат сервера и затем немедленно закрывает TCP-соединение, не продолжая обмен ключами.
Я использую самозаверяющий сертификат, поэтому это происходит (например), когда браузер не доверяет сертификату и должен попросить пользователя подтвердить его. Очевидно, что клиенту все равно, потому что он отключился.
DEBUG ["http-apr-443"-exec-3] org.apache.tomcat.util.net.AprEndpoint: Handshake failed: error:00000000:lib(0):func(0):reason(0)
ERROR ["http-apr-443"-exec-3] org.apache.coyote.http11.Http11AprProtocol: Error reading request, ignored
java.lang.NullPointerException
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:221)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:323)
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:1675)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Если клиент не отключается после получения сертификата от сервера, а вместо этого продолжает рукопожатие, все работает, как ожидалось, без ошибок в журналах. Возможно, это просто косметика, но, возможно, я сделал что-то не так.
Коннектор настроен таким образом (более-менее скопирован где-то из примера):
<Connector
SSLCertificateFile="/etc/ssl/certs/server.crt"
SSLCertificateKeyFile="/etc/ssl/private/server.key"
SSLEnabled="true"
acceptCount="100"
clientAuth="optional"
disableUploadTimeout="true"
enableLookups="false"
maxHttpHeaderSize="8192"
maxThreads="150"
port="443"
scheme="https"
secure="true"
sslProtocol="TLSv1"
/>
Отредактируйте, чтобы добавить, FWIW, я только что заметил, что есть аналогичный трассировка стека заканчивается в catalina.out
в то же время:
Exception in thread ""http-apr-443"-exec-3" java.lang.NullPointerException
at org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor.run(AprEndpoint.java:1678)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Это отвлекающий маневр; он перехватывает исключение из обработчика соединения и сбрасывает трассировку. Его загадочные ошибки, подобные этой, заставляют меня предлагать использовать mod_jk
для пересылки запросов к коннектору AJP на Tomcat.