2009-05-26 20 views
10

我在读What happens when a code signing certificate expires - Stack Overflow,想知道更准确的答案。提供的答案更多的是关于建立自己的CA.即使拥有自己的CA,您仍然需要处理过期的代码证书。如何防止需要每隔1年或2年重新签署我的代码?

如果您在不使用时间戳服务的情况下对代码进行签名,则在证书过期后,您的代码将不再受信任,并且根据安全设置,它可能不被允许运行。您需要每隔1年或2年用新证书或更新证书重新签署所有代码。

可信(数字)时间戳允许数字签名在证书本身过期后仍然有效。只有在您做出更改后,您才需要使用新证书重新签署代码。

这一切听起来是否正确?如果是这样,我需要建议使用什么时间戳服务,最好是从实际使用时间戳服务的人那里获得。我也想知道是否有任何内部解决方案,类似于您自己的CA.

现在这适用于PowerShell脚本,但我最终会遇到与其他代码相同的问题。

更新:如何签订PS脚本时间戳样品(你可以为这个脚本):

Set-AuthenticodeSignature -filepath "D:\Projects\A Sample\MyFile.ps1" 
    -cert gci cert:\CurrentUser\My -codesigning 
    | where -Filter {$_.FriendlyName -eq "Thawte Code Signing"} 
    -IncludeChain All 
    -TimeStampServer "http://timestamp.verisign.com/scripts/timstamp.dll" 

然后,看到签名者证书和戳器证书,你可以做这样的:

Get-AuthenticodeSignature MyFile.ps1 | fl * 

它给你的主题(CN,OU等),发行人,前/后的日期,以及拇指指模您的证书和戳器的证书两种。您还会收到一条消息,指出签名的状态。

回答

9

您最好选择一个可信证书提供者(Verisign,Thawte,Comodo等)。这允许你在没有用户明确信任你的私有根CA的情况下签署你的软件。我们已经使用Verisign和Thawte,Comodo甚至是GoDaddy的时间戳,甚至在证书过期几年后软件无效也没有任何问题。

+3

+1:总体思路:使用全球信任的提供商。 – 2009-05-26 22:12:52

+0

随着Verisign和Thawte您是否也有时间戳?没有时间戳,有些系统不会抱怨证书过期,并且不运行你的代码? – Bratch 2009-05-26 22:42:39

8

时间戳是一项免费服务 - 它确实只是一个值得信赖的提供商,用于验证您是否在给定时间签署了该文件。 Verisign的时间戳服务是标准服务。 Set-AuthenticodeSignature帮助中的最后一个例子演示了如何使用它。

李福尔摩斯[MSFT] 的Windows PowerShell发展 微软公司

-1

你真的不能逃脱其最终辞职的代码。运行自己的CA的好处是您可以选择发布代码签名证书的时间比默认的更长,从而允许您在必须退出任何内容之前等待更长时间。缺点是当然有另一个服务或服务器(你的CA)来处理。