首页 文章

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

提问于
浏览
2

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

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

是否可以配置 Apache Tomcat 7.0 不信任并自动拒绝此类过期的客户端证书,即使它们位于其受信任的存储中?

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

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

1 回答

  • 0

    我认为你最好的办法是编写自己的 X509TrustManager 并使用你自己的 checkClientTrusted 实现 . 不幸的是,您可能必须编写大量的管道代码,除非您可以找到另一个类来扩展以管理信任存储,撤销等繁重的工作 .

    您可能值得花时间使用调试器来跟踪默认情况下发生的JRE 's classes to see what' - 也许它可能是Tomcat没有启用某些对大多数人有意义的功能 .

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

    Another question on SO对于所发生的事情有空闲的猜测,但没有什么是真正明确的 .

相关问题