【问题标题】:Why does Windows state "Unverified Publisher" for signed executable with a subsequently expired certificate为什么 Windows 为带有随后过期证书的签名可执行文件声明“未经验证的发布者”
【发布时间】:2017-01-01 19:05:42
【问题描述】:

2014 年,我从 StartSSL 购买了一个二级代码签名证书,用于对我的二进制文件进行数字签名。该证书刚刚过期,我实际上正在尝试获取新证书。然而,在一个不相关的事件中,我在虚拟机中运行了一个我签名的安装程序,当 Windows 显示 UAC 对话框的“未验证的发布者”变体时,我有点……恼火。

当我查看数字签名属性时,我看到:

当然证书已经过期,但是为什么文件(在有效期内签名的)突然无法验证?我还没有看到其他软件会发生这种情况,例如,如果我查看 Office 2003 安装程序的旧签名副本,它不会抱怨签名无效并且有效期已在十年前到期。

这是为什么?坦率地说,我现在想知道首先购买证书的意义是什么,并认真考虑取消正在进行的更换。当他们使自己无效时,似乎有点毫无意义。或者这是2级和3级之间的区别? (Class 3 是我现在想要掌握的版本)

【问题讨论】:

  • 也许this explains it? "更新:并非所有发布者证书都允许时间戳以提供无限期的生命周期。如果发布者的签名证书包含生命周期签名者 OID (OID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13 ),当发布者的签名证书过期时,签名将失效,即使签名带有时间戳。”
  • 哈利,谢谢你的评论。这实际上似乎是答案(证书具有“代码签名(1.3.6.1.5.5.7.3.3)”和“终身签名(1.3.6.1.4.1.311.10.3.13)”扩展密钥使用标志,而我拥有的较旧的 Comodo 证书没有任何“扩展”使用标志,并且似乎没有自我过期)。如果您想将此添加为答案,我可以“标记”它,否则我将自己添加一些屏幕截图。再次感谢!

标签: windows sign authenticode


【解决方案1】:

这显然是对某些代码签名证书的设计限制,如 Microsoft 博客文章的第一个脚注中所述,Everything you need to know about Authenticode Code Signing

并非所有发布者证书都启用以允许时间戳提供无限期的生命周期。如果发布者的签名证书包含生命周期签名者 OID (OID_KP_LIFETIME_SIGNING 1.3.6.1.4.1.311.10.3.13),则即使签名带有时间戳,当发布者的签名证书过期时,签名也会失效。这是为了将证书颁发机构从永久维护吊销列表(CRL、OCSP)的负担中解放出来。

您可能希望检查替换证书是否具有相同的限制,并可能考虑替代供应商。

【讨论】:

  • 鉴于 StartSSL 最近的困境,我已经决定不再作为供应商使用 StartSSL,并且目前正在获得 Comodo 证书(尽管也不是没有疑虑,我最初有一个 Comodo cert 在 2013 年获得了证书,这是一次非常不愉快的经历;就我个人而言,他们提供了地球上最糟糕的服务)而且其他提供商非常昂贵。即使有了证书,你似乎得到了你所支付的,我只是希望我事先知道这一点,那时我根本不会为 StartSSL 烦恼。不过至少我现在知道了。
猜你喜欢
  • 2018-06-03
  • 2011-02-18
  • 1970-01-01
  • 2019-05-11
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 2013-05-10
相关资源
最近更新 更多