【问题标题】:What if trustStore certificate expires?如果 trustStore 证书过期怎么办?
【发布时间】:2014-04-10 19:45:04
【问题描述】:

如果存储在 java 信任库中的证书过期,我将/可能会收到哪些例外情况? 我一定会收到访问认证资源的例外情况吗?什么情况下不会有例外?

【问题讨论】:

    标签: java ssl certificate truststore


    【解决方案1】:

    如果信任库中的证书过期,并且没有被具有相同主题和密钥的更新版本替换,它将被丢弃以构建证书路径,因此您将获得 javax.net.ssl.SSLHandshakeException (来自“PKIX 路径构建失败...”)。

    如果您查看JSSE Reference Guide (trust manager section),它依赖于CertPath API(它实现了验证日期/时间所需的内容)。

    默认的 PKIX 信任管理器实现 RFC 3280,它要求链中的所有证书在当前日期/时间有效。请参阅第 6.1 节:

    本节介绍的算法根据当前日期和时间验证证书。

    (d) 对于 {1, ..., n} 中的所有 x,证书在相关时间有效。

    如果你想绕过这个,你可以实现你自己的信任管理器(虽然一般不推荐,因为你会削弱默认算法)。

    【讨论】:

    • 如果,@Bruno,信任库同时包含服务器和根证书,并且只有服务器证书过期,会有什么行为?从您的回答看来,服务器证书将被丢弃,并且不会引发异常,因为它仍然能够针对根证书进行验证。这是正确的吗?
    • 在我们的环境中,叶证书(在链的末端)已过期,但其他 3 个证书(包括根证书)未过期。我们仍然能够建立 SSL 连接。所以这似乎证实了@rudolfv 的怀疑。
    • @Joman68 如果服务器证书已经过期,那么它应该抛出一个异常。您是否有任何自定义信任管理器?
    • @Bruno 我刚刚遇到了类似的情况。我们的客户信任库包含(过期的)服务器证书,但既不包含 CA,也不包含中间 CA。连接被接受。据我所知,没有涉及自定义信任管理器。
    • @Bruno 我刚刚用 Zulu Java 11 确认:在客户端的信任库中只有过期的服务器证书足以建立连接。
    【解决方案2】:

    我希望系统不会使用过期的证书。所以对于你的代码,它应该表现得好像根本没有找到一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-06
      • 2013-09-11
      • 2010-09-25
      • 1970-01-01
      • 2018-09-13
      • 2021-12-22
      • 2016-08-05
      相关资源
      最近更新 更多