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

dr_*_*285 13 certificate expired certificate-authority ad-certificate-services

到目前为止对我来说很清楚:如果代码签名证书本身过期,则签名的代码将被验证/接受,以防它是用时间戳签名的。如果不是,则签名代码也已过期。

但是如果我的 CA 本身过期(根 CA 和因此颁发的 CA)会发生什么?

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

Cry*_*t32 16

但是如果我的 CA 本身过期(根 CA 和因此颁发的 CA)会发生什么?

顾名思义,什么都没有。让我们更详细地解释一下。

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

  • 数据不被篡改
  • 签名证书是有效的
  • 链中的证书都没有被撤销
  • 根证书是可信的

一旦签名证书以一种或另一种方式过期、撤销或失效,则签名被视为无效。干净利落。

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

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

  • 数据不被篡改
  • 签名证书*是*时间在签名时有效:签名时间在签名证书的有效期内
  • * 在*签名生成之前,这两个证书都没有被撤销
  • 签名和时间戳证书都链接到受信任的根 CA(无论它们的时间有效性如何,都必须在信任存储中)。

这里发生了什么变化:签名在涉及的证书到期后仍然有效。也就是说,用于签名和时间戳证书的整个链可能会过期(连同根证书)并且不会破坏信任。链中的证书可以被撤销。唯一的要求:如果任何证书被吊销,吊销时间(从 CRL 获得)必须设置为签名创建后的时间(签名时间由时间戳标识)。上一句的意思是必须有一个签名的 CRL 来证明在签名时两个证书都没有被撤销。

这就是现代 Windows 系统提供很久以前过期的根证书的原因。它们仍然用于验证旧签名并带有时间戳。

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