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

Bra*_*tch 11 powershell code-signing certificate trusted-timestamp

我正在阅读当代码签名证书到期时会发生什么 - 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"
Run Code Online (Sandbox Code Playgroud)

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

Get-AuthenticodeSignature MyFile.ps1 | fl *
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*der 9

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

  • +1:一般想法:使用全球信任的提供商. (3认同)
  • 即使是公司工作,我也投票支持使用可靠的提供商.他们已经拥有管理证书存储的基础架构和专业知识,因此您不必担心它.Certs现在便宜得多,证书的成本远远低于让员工管理它的成本. (2认同)

小智 8

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

Lee Holmes [MSFT] Windows PowerShell开发Microsoft Corporation