Java 阀门配置在tomcat中不工作?

Java 阀门配置在tomcat中不工作?,java,tomcat,ssl,tomcat-valve,Java,Tomcat,Ssl,Tomcat Valve,我使用url访问我的应用程序,即https://myIPAddress:8443/myWebApp/ 我已经创建了myWebApp.xml文件,其中包含以下上下文元素,并将其放置在\conf\Catalina\localhost\ <Context> <Valve className="org.apache.catalina.authenticator.MySSLAuthenticator"/> </Context> 我不知道这里少了什么?tomcat版本

我使用url访问我的应用程序,即
https://myIPAddress:8443/myWebApp/

我已经创建了
myWebApp.xml
文件,其中包含以下上下文元素,并将其放置在
\conf\Catalina\localhost\

<Context>
 <Valve className="org.apache.catalina.authenticator.MySSLAuthenticator"/>
</Context>

我不知道这里少了什么?tomcat版本是6.0.35

在您的问题中没有提到相关的
领域
定义,这可能是导致错误的原因(空证书链)。如果没有与请求关联的主体(如果之前没有成功执行身份验证,则不太可能),则
SSLAuthenticator
将调用身份验证域。但是,在您的情况下,这个
领域可能不存在,或者它确实存在,但在某种程度上被错误配置,因此SSLAuthenticator无法解释它

您可以通过禁用自定义的
myslauthenticator
来验证这一点,并首先使其与内置的
SSLAuthenticator
一起工作。一旦你开始工作,那么试着扩展SSLAuthenticator。假设这就是你想要做的

还建议将日志记录级别设置为debug,因为您可能会发现从扩展类记录的有用信息:

及其父类

对于tomcat甚至无法识别的类,最有可能的答案是您已经在应用程序上下文中定义了它。Tomcat阀可与
发动机
主机
上下文
关联,并按该顺序调用。因此,最有可能解释为什么tomcat永远不会到达您的
阀门的答案是,内置的
SSLAuthenticator
引擎
级别捕获(并处理)请求。因此,后续的
主机
上下文
级处理永远不会达到

javax.net.ssl.SSLHandshakeException: null cert chain
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:266)
    at sun.security.ssl.ServerHandshaker.clientCertificate(ServerHandshaker.java:1631)
    at sun.security.ssl.ServerHandshaker.processMessage(ServerHandshaker.java:176)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
    at java.io.InputStream.read(InputStream.java:101)
    at org.apache.tomcat.util.net.jsse.JSSESupport.handShake(JSSESupport.java:181)
    at org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(JSSESupport.java:148)
    at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1120)
    at org.apache.coyote.Request.action(Request.java:349)
    at org.apache.catalina.authenticator.SSLAuthenticator.authenticate(SSLAuthenticator.java:135)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)