Tomcat NullPointerException当客户端不完成SSL握手

我有Tomcat 7.0.12使用APR和OpenSSL。 一切似乎都工作得很好,但我看到一些NullPointerException堆栈跟踪显示在日志中。 据我所知,无论何时客户端连接,发起TLS握手,接收服务器证书,然后立即closuresTCP连接而不进行密钥交换,似乎都会发生。

我正在使用自签名证书,因此,只要浏览器不信任证书,就必须要求用户进行validation。 客户显然不关心,因为它是断开的。

 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) 

如果客户端在从服务器接收到证书后没有断开连接,而是继续进行握手,则所有事情都按预期工作,日志中没有错误。 也许这只是表面的,但也许我做错了什么。

连接器是这样configuration的(或多或less地从某个例子中复制):

 <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) 

这是一只红鲱鱼; 它从连接处理程序捕获exception并转储跟踪。 像这样的神秘错误,导致我build议使用mod_jk将请求转发到Tomcat上的AJP连接器。