如何验证签名代码的时间戳正确性

13

我刚从StartSSL获得了我的代码签名证书,并试图签署我们的安装程序。

签名过程进行得很好,我得到了一个安装程序exe,Windows不再抱怨它是来自未知发布者的。这太棒了!

然而,我试图确保时间戳也按照广告所说的那样工作,所以我将我的PC日期移动到2012年,超过了我的代码签名证书过期日期。

据说这不应该有任何影响,但是当我运行相同的安装程序exe时,现在我仍然会收到相同的“未知发布者”的警告。

查看数字签名选项卡中exe的属性,我肯定能看到时间戳显示今天(2010年),但这似乎没有任何帮助。

谷歌没有给我任何信息,除非你在时间戳字段中看到日期,否则一切都很好。我无法相信这一点,我的PC日期被提前,还是不能正常工作。

有人知道这个时间戳概念是否有效,以及如何确保我正在正确签名可执行文件吗?

谢谢。


1
“rem” 似乎有正确的答案。您可以在 http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/Authenticode_PE.docx 阅读更多关于“生命周期签名语义”的内容。 - user200783
请注意Mark Berry对rem的答案的评论。显然,StartSSL是否支持时间戳取决于您拥有哪个级别的验证。 - MZB
3个回答

9
由StartSSL发放的代码签名证书中包含增强的密钥用途(EKU)属性“Lifetime Signing”(1.3.6.1.4.1.311.10.3.13),这会导致文件签名在证书到期时失效,而与任何时间戳无关。

2
根据StartCom官方论坛中的这篇帖子,引用了这份比较表,"在扩展验证级别下,代码签名证书支持时间戳。" 所以如果你购买他们最高级别的验证(仍然相对便宜),这个问题就解决了。这样做似乎很有道理,因为他们想要更高级别的验证来保证证书不会过期。注意:我自己没有测试过这个方法。 - Mark Berry
2
请注意,"StartSSL™ Extended Validation certificates are currently restricted to corporations, business entities, government entities and other legally established organizations" - 这些证书目前仅限于公司、商业实体、政府实体和其他合法机构使用,不适用于个人开发者。 - Sergey Vlasov
看起来StartCom/StartSSL最近更改了此设置。我有一个旧的证书(现在已过期),其中有此属性,但是我几天前购买了一个新的证书,它没有此属性!在StartCom的论坛上也有一篇帖子说到这个问题。 - maf-soft

2
抱歉,我没有你要的答案,但根据Comodo's Instant SSL FAQ,你不应该看到你看到的行为。
引用:
“时间戳可以确保证书过期时代码不会过期。如果您的代码已经进行了时间戳签名,即使证书已过期,数字签名仍然有效。只有在您想签署其他代码时才需要新证书。如果您在签名时没有使用时间戳选项,则必须重新签署代码并将其发送给您的客户。”
Comodo在这个问题上似乎是权威的,所以我倾向于相信他们所说的。
我也很期待这个问题的答案,因为我非常希望从StartSSL购买代码签名证书。我在他们的网站上注意到,代码证书是“beta”版本,所以可能需要解决一些问题。

同样适用于StartSSL - 我认为OP应该与他们的客户支持联系,看看他们有什么建议。 - Rob

0

“签名时间”和“盖章签名者”的时间戳之间存在差异。签名时间是您实际签署代码的时间,而时间戳来自“盖章签名者”(证书服务器)。

使用证书颁发机构的时间戳进行签名将确保即使您的证书已过期,您的签名仍然有效。


Windows会显示证书已过期(这对用户来说看起来很糟糕),还是会回到通常会收到的标准的“未知发布者”警告? - Dan W

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接