PowerShell Set AuthenticodeSignature-IncludeChain选项优点/缺点



使用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证书不会提供任何有用的信息。若客户端并没有根证书,那个么将其包含在签名中也没有意义。

最新更新