问题 我怎样才能防止每1年或2年重新签署我的代码?


我正在读书 代码签名证书到期时会发生什么 - Stack Overflow 并且想知道更稳固的答案。提供的答案更多是关于设置自己的CA.即使使用您自己的CA,您仍然需要处理过期的代码证书。

如果您在不使用时间戳服务的情况下签署了代码,则在证书过期后,您的代码将不再受信任,并且根据安全设置,可能不允许其运行。您需要每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"

然后,要查看签名者证书和TimeStamper证书,您可以这样做:

Get-AuthenticodeSignature MyFile.ps1 | fl *

它为您提供证书和时间戳证书的主题(CN,OU等),颁发者,前/后日期和指纹。您还会收到一条消息,指示签名的状态。


11981
2018-05-26 21:52


起源



答案:


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


9
2018-05-26 22:00



+1:一般想法:使用全球信任的提供商。 - John Gietzen
有了Verisign和Thawte你也有时间戳吗?如果没有时间戳,某些系统会抱怨证书过期,而不是运行您的代码? - Bratch
@Bratch:是的,你必须使用他们的时间戳服务器。我们从未在没有它的情况下发布,因此我无法对非时间戳应用程序发表评论。 - Paul Alexander
顺便提一下,Comodo是另一个预先安装的全球信任的root提供商,并且拥有更便宜的证书。我没有搞乱时间戳。 - Jaykul
即使是公司工作,我也投票支持使用可靠的提供商。他们已经拥有管理证书存储的基础架构和专业知识,因此您不必担心它。 Certs现在便宜得多,证书的成本远远低于让员工管理它的成本。 - Paul Alexander


答案:


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


9
2018-05-26 22:00



+1:一般想法:使用全球信任的提供商。 - John Gietzen
有了Verisign和Thawte你也有时间戳吗?如果没有时间戳,某些系统会抱怨证书过期,而不是运行您的代码? - Bratch
@Bratch:是的,你必须使用他们的时间戳服务器。我们从未在没有它的情况下发布,因此我无法对非时间戳应用程序发表评论。 - Paul Alexander
顺便提一下,Comodo是另一个预先安装的全球信任的root提供商,并且拥有更便宜的证书。我没有搞乱时间戳。 - Jaykul
即使是公司工作,我也投票支持使用可靠的提供商。他们已经拥有管理证书存储的基础架构和专业知识,因此您不必担心它。 Certs现在便宜得多,证书的成本远远低于让员工管理它的成本。 - Paul Alexander


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

Lee Holmes [MSFT] Windows PowerShell开发 微软公司


8
2018-05-27 22:03



是的,在例3中是-TimeStampServer参数。现在我需要做的就是选择一个,并找出我是否可以将它与内部CA一起使用。我可能需要做保罗亚历山大在上面提出的建议并获得一个外部的建议。至少我知道时间戳服务将与我的证书一起使用。 - Bratch


你不能真的逃脱最终辞职的代码。运行自己的CA的好处是,您可以选择以比默认值更长的生命周期发布代码签名证书,从而允许您在重新签名之前等待更长时间。缺点当然是要处理另一个服务或服务器(您的CA)。


-1
2018-04-30 16:51