为什么Windows声明"未验证的发布者"对于带有随后过期证书的签名可执行文件

时间:2017-01-01 19:05:42

标签: windows sign authenticode

2014年,我从StartSSL购买了一个二级代码签名证书,我曾用它来对我的二进制文件进行数字签名。这个证书刚刚过期,我实际上正在尝试获得一个新证书。但是,在一个不相关的事件中,我在VM中运行了一个已签名的安装程序,并且有点......恼火......当Windows启动了未经验证的发布者" UAC对话框的变体。

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

WTF

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

Still valid

这是为什么?坦率地说,我现在想知道首先购买证书的重点是什么,并且认真考虑取消进行中的替换。当他们使自己无效时,似乎毫无意义。或者这是2级和3级之间的不同? (第3类是我试图抓住现在的版本)

1 个答案:

答案 0 :(得分:3)

这显然是对某些代码签名证书的设计限制,如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)的负担。

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