当 x509 CA 证书过期时会发生什么?

信息安全 tls
2021-09-01 19:41:41

我有以下问题:我们使用带有客户端证书验证的 TLS 来识别服务的客户端。为此,我们创建了自己的自签名证书颁发机构,它只为这些客户端签署证书并验证其有效性。我们在我们的开发环境中复制了这个设置。

开发 CA 刚刚过期,因此无法在我们的开发环境中颁发新证书。我们在生产 CA 上还有很多时间,但我想知道是否有一个平滑的过程可以在不破坏现有证书的情况下从过期的 CA 证书迁移到新的未过期证书。

天真的解决方案是,生成一个新的 CA 证书并替换旧的。但是,我相信这会导致现有客户无法通过验证。

我做了一些谷歌搜索和阅读,我认为我需要做的是..

  1. 创建一个新的 CA 证书并将其用于签署新的客户端证书
  2. 创建某种“组合”证书,其中包括新 CA 证书和旧 CA 证书,并将其用于验证客户端(桥?链?)

第 2 点是我找不到详细文档的地方。我还有其他一般性问题:

  1. 是否可以将“组合”证书设置为既可用于颁发新证书又可用于验证新旧证书的方式?比如,是否可以指出“这个证书实际上是 2 个证书,而新的证书应该用于签署新客户端?” 这严格来说是一个实际问题 - 需要跟踪的文件更少。
  2. 我是否应该完全避免组合任何东西,而只在验证软件的信任池中使用两个 CA 证书?我想这又回到了第一个问题..

对含糊的语言感到抱歉,我故意避免使用特定的 x509 术语,因为我担心我会错误地使用它们并混淆问题。

2个回答

签名是使用私钥完成的。验证签名的匹配公钥在证书内。您可以在重新使用现有密钥对的同时更新证书(更改过期时间)。因此,即使证书本身已更改,签名仍然有效。

为了升级密钥的质量,您创建一个新密钥并基于此创建一个新的 CA 证书。然后,新证书将由这个新 CA 证书颁发,但旧 CA 仍可用于验证现有证书,并且在所有这些旧证书过期后可以丢弃。

适当的 PKI 还应涵盖所有证书的证书更新等方面,包括来自 CA 和根 CA 的证书。

当然,您可以使用旧证书进行验证,并使用新证书对新证书进行签名和验证。但基本上这意味着,您正在并行运行 2 个 PKI,没有连接等。

作为一般规则,CA 永远不应发布超出其自己的到期日期,因此在根到期日期时,其所有已签发的客户端证书也无效。这意味着,一旦根证书用完,您根本没有理由保留旧证书。

如果您想在尽可能减少对用户影响的情况下解决您的问题,您应该立即为客户端和根证书制定适当的续订策略,并在当前系统崩溃之前部署它。一个这样的系统实际上是有一个宽限期,旧证书仍然有效,但更新是使用新证书完成的。