配置Apache Tomcat 7.0以拒绝具有过期客户端证书的连接

时间:2015-11-13 07:55:41

标签: java tomcat authentication ssl truststore

考虑Apache Tomcat 7.0配置为进行客户端身份验证(连接器的参数clientAuth设置为true)。

看来Tomcat默认信任过期的客户端证书,这些证书位于其受信任的存储中(允许它们成功进行身份验证)。

是否可以配置Apache Tomcat 7.0不信任并自动拒绝这些过期的客户端证书,即使它们在受信任的商店中也是如此?

看来,这可以通过设置另一个trustManagerClassName来实现,默认情况下为X509TrustManagerImpl。但我不知道,默认算法真的允许过期的证书吗?应该在这里使用哪一个?或者我必须实现自己的并将它放在tomcat的库中?

UPD :我发现了非常相似的问题:Java trustmanager behavior on expired certificates 但在答案中,答案中没有任何适当的解决方案。我正在寻找现有的更安全的X509TrustManager实施方案,它将检查证书过期。

1 个答案:

答案 0 :(得分:0)

我认为您最好的选择是编写自己的X509TrustManager并使用自己的checkClientTrusted实现。不幸的是,您可能需要编写大量的管道代码,除非您可以找到另一个类来扩展以管理信任存储,撤销等等。

使用调试器来跟踪JRE的类以查看默认X509TrustManager中发生的情况可能是值得的 - 可能它配置不正确,或者Tomcat可能没有启用某些功能这对大多数人来说都是有意义的。

只是看看来自Java 8的反编译源,看起来它归结为sun.security.validator.SimpleValidator,它似乎在检查证书的有效性时考虑(当前)日期。我希望JRE本身会在某个时候抛出CertificateExpiredException。我不认为Tomcat会管理这些。

Another question on SO对所发生的事情一无所知,但没有任何确切的确定。