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