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

到目前为止,我清楚:如果代码签名证书本身到期,签名代码将被validation/接受,如果它是用时间戳签名的话。 如果不是,那么签名的代码也会过期。

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

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

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

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

    如果签名没有时间戳,只要符合以下条件,签名是有效的:

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

    一旦签名证书过期,被撤销或以其他方式失效,签名被认为是无效的。 干净利落。

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

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

    • 数据不被篡改
    • 签字证书*在签字时间是*时间有效:签字时间在签字证书有效期内
    • 签名生成之前,两个证书都没有被撤销
    • 同时,签名和时间戳证书链接到受信任的根CA(无论其时间有效性,只需在信任存储区)。

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

    这就是为什么现代Windows系统很早以前就发布了过期的根证书。 他们仍然用来validation旧的签名,哪些是时间戳。

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