使用Set-AuthenticodeSignature
时,有一个名为IncludeChain
的选项。虽然有关于每个选项的文档,但我还没能发现关于每个设置的优点/缺点的太多指导(当你选择一个设置而不是另一个设置时)。
在示例中,无论在哪里看到IncludeChain
,它总是设置为All
。我认为All
可能是最好的答案,但我想了解每种设置的优点和缺点。
Signer
NotRoot
(默认)All
除了All
使文件变大之外,每种设置的具体优点和缺点是什么?
参考文献
- https://technet.microsoft.com/en-us/library/hh847874.aspx
- http://go.microsoft.com/fwlink/?LinkID=113391
- 如何避免每1年或2年需要重新签署我的代码
示例
$certPfx = "super secret location"
$certPassword = "super secret password"
$cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2($certPfx, $certPassword)
Set-AuthenticodeSignature -Filepath "ps1 file location" `
-Cert $cert `
-TimeStampServer "url to timestamp server" `
-IncludeChain All `
-HashAlgorithm SHA256
默认NotRoot
是最佳选项。
- 签名者
优点:当您只放置签名者证书时,签名大小相对较小。
缺点:如果接收者不具备构建链的所有信息,则有效签名可能会失效。此外,在签名验证过程中,从互联网上检索证书会导致明显的延迟。
- NotRoot
优点:通过附加中间CA证书加快链构建,减少签名验证时间。在没有关于链证书的额外信息可用的情况下(例如,通过本地商店或AIA扩展),这些证书填补了空白,极大地帮助了链的构建。
缺点:每个中间CA证书的签名大小增加了约2kb。
- 全部
优点:通过附加中间CA证书加快链构建,减少签名验证时间。
缺点:每个CA证书的签名大小增加了约2kb。此选项包括根CA,它是冗余信息。如果客户端已经具有受信任的根证书(因此它已经安装),则包含的根CA证书不会提供任何有用的信息。若客户端并没有根证书,那个么将其包含在签名中也没有意义。