过去两天(2021 年 1 月 1 日和 2 日),我尝试使用 Inno Setup 构建我的设置脚本,但数字签名失败。所以我通过电子邮件联系了威瑞信,等待他们的回复。
如果以下URL不可用,我可以在设置创作工具中使用哪个其他时间戳URL?我得到的具体错误是:SignTool Error: The specified timestamp server either could not be reached or returned an invalid response.
如果我通过签名设置时间戳,会发生什么?
如果我没有设置怎么办?
这是必要的吗?为什么推荐?
cryptography code-signing portable-executable 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等),颁发者,前/后日期和指纹.您还会收到一条消息,指示签名的状态.
请注意,此问题仅适用于Windows Server 2008 SP2
我开发了一个Windows应用程序.在分发之前,我已使用SHA1和SHA256对其进行了签名和时间戳.此应用程序由多个DLL组成.我在构建过程中签署每个DLL.我使用过VeriSign的证书.在执行时,启动应用程序时,它会验证每个DLL的签名和时间戳,以确保使用WinVerifyTrust API 完整性.验证期间我收到"E_CERT_EXPIRED - 签名者证书已过期"错误.
此外,我无法在可执行文件的属性页中看到时间戳细节.请看下面 -
现在,该证书已过期但根据此SO文章代码签名证书到期时会发生什么?.可执行文件应该完美运行没有任何问题.
我还检查了这个KB怀疑原因,但已经应用了与此KB相关的修复.任何人都可以分享更多的亮点吗?
code-signing timestamping windows-server-2008 code-signing-certificate verisign
虽然我在Windows可执行文件上的详细SignTool(手动)命令上没有出现任何错误,但时间戳被覆盖了,我希望有多个时间戳,这可能吗?
PowerShell功能
function sign32exe([string]$arg)
{
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' sign /fd sha256 /a $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://timestamp.globalsign.com/?signature=sha2 /td sha256 /v $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://sha256timestamp.ws.symantec.com/sha256/timestamp /td sha256 /v $arg
Start-Sleep -Seconds 5
& 'C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe' timestamp /tr http://time.certum.pl /td sha256 /v $arg
}
Run Code Online (Sandbox Code Playgroud)
我从SignTool得到了肯定的输出,但是每次调用都会覆盖时间戳(为了更好的可读性而对其进行了重组):
签名过程进行顺利:
Done Adding …Run Code Online (Sandbox Code Playgroud) code-signing ×5
verisign ×2
certificate ×1
cryptography ×1
inno-setup ×1
installer ×1
powershell ×1
signtool ×1
timestamp ×1
timestamping ×1