考虑Apache Tomcat 7.0
配置为进行客户端身份验证(连接器的参数clientAuth
设置为true
)。
看来Tomcat默认信任过期的客户端证书,这些证书位于其受信任的存储中(允许它们成功进行身份验证)。
是否可以配置Apache Tomcat 7.0
不信任并自动拒绝这些过期的客户端证书,即使它们在受信任的商店中也是如此?
看来,这可以通过设置另一个trustManagerClassName
来实现,默认情况下为X509TrustManagerImpl
。但我不知道,默认算法真的允许过期的证书吗?应该在这里使用哪一个?或者我必须实现自己的并将它放在tomcat
的库中?
UPD :我发现了非常相似的问题:Java trustmanager behavior on expired certificates
但在答案中,答案中没有任何适当的解决方案。我正在寻找现有的更安全的X509TrustManager
实施方案,它将检查证书过期。
答案 0 :(得分:0)
我认为您最好的选择是编写自己的X509TrustManager
并使用自己的checkClientTrusted
实现。不幸的是,您可能需要编写大量的管道代码,除非您可以找到另一个类来扩展以管理信任存储,撤销等等。
使用调试器来跟踪JRE的类以查看默认X509TrustManager
中发生的情况可能是值得的 - 可能它配置不正确,或者Tomcat可能没有启用某些功能这对大多数人来说都是有意义的。
只是看看来自Java 8的反编译源,看起来它归结为sun.security.validator.SimpleValidator
,它似乎在检查证书的有效性时考虑(当前)日期。我希望JRE本身会在某个时候抛出CertificateExpiredException
。我不认为Tomcat会管理这些。
Another question on SO对所发生的事情一无所知,但没有任何确切的确定。