当根 CA 过期时,代码签名证书会发生什么?

当根 CA 过期时,代码签名证书会发生什么?

到目前为止,我很清楚:如果代码签名证书本身已过期,则签名的代码将得到验证/接受(前提是它是使用时间戳签名的)。如果没有,则签名的代码也会过期。

但是如果我的 CA 本身过期了(根 CA 并因此颁发 CA),会发生什么情况?

  • 如果代码带有时间戳,还会被接受吗?
  • 过期的根 CA 和颁发 CA 证书是否仍必须存在(例如在受信任的根 CA 证书存储中)?这是我的假设,即使 CA 可能被降级,执行签名的客户端仍必须信任该 CA?否则信任链将被破坏,对吗?
  • 缺少 CRL 或 AIA 会带来什么问题吗?

答案1

但是如果我的 CA 本身过期了(根 CA 并因此颁发 CA),会发生什么情况?

从字面上看,什么也没有。让我们更详细地解释一下。

如果签名没有时间戳,则签名在以下条件下有效:

  • 数据未被篡改
  • 签名证书有效期
  • 证书链中的证书均未被撤销
  • 根证书是受信任的

一旦签名证书过期、被撤销或以某种方式失效,签名将被视为无效。就这么简单。

数字签名中的时间戳的目的是为签名内容提供扩展信任。签名证书的有效期很短,基本信任设置不适合长期(可能是存档)签名。通常(没有时间戳),每次更新签名证书时都必须重新创建签名。这是一条无路可走的路。

通过在数字签名中添加时间戳,信任条件更改为以下列表:

  • 数据未被篡改
  • 签名证书*曾是*签名时有效时间:签名时间在签名证书有效期内
  • 两份证书均未被撤销*前*签名生成
  • 签名和时间戳证书都链接到受信任的根 CA(无论其时间有效期如何,只需在信任存储中)。

这里的变化是:相关证书过期后,签名仍然有效。也就是说,签名和时间戳证书的整个链可能会过期(连同根证书),但不会破坏信任。链中的证书可以被撤销。唯一的要求是:如果任何证书被撤销,则必须将撤销时间(从 CRL 获得)设置为签名创建后的时间(签名时间由时间戳标识)。上一句的意思是必须有一个签名的 CRL 来证明在签名时没有证书被撤销。

这就是为什么现代 Windows 系统附带早已过期的根证书的原因。它们仍然用于验证旧签名和时间戳。

不久前,我写了一篇博客文章,更详细地解释了这个主题:数字签名和时间戳

相关内容