PowerShell Set-AuthenticodeSignature - IncludeChain Options优点/缺点?

时间:2016-03-24 14:12:45

标签: powershell authenticode

使用Set-AuthenticodeSignature时,会有一个名为IncludeChain的选项。虽然有关于每个选项的文档,但我还没有找到关于每个设置的优点/缺点的大量指导(当你选择一个设置而不是另一个设置时)。

我在示例中看到IncludeChain的任何地方,始终设置为All。我认为All可能是最好的答案,但我想了解每种设置的优缺点。

  • Signer
  • NotRoot(默认)
  • All

除了All使文件更大一点之外,每个设置的具体优缺点是什么?

参考

实施例

$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

1 个答案:

答案 0 :(得分:3)

默认NotRoot是最佳选择。

  • 签名者
专业人士:当您只放置签名者证书时,签名大小相对较小。

缺点:如果收件人没有构建链的所有信息,则有效签名可能变为无效。此外,从互联网上检索证书会在签名验证过程中造成明显的延迟。

  • NotRoot

专业人员:通过附加中间CA证书加快链构建,缩短签名验证时间。如果没有关于链证书的额外信息(例如,通过本地商店或AIA扩展),这些证书填补了这一空白,对链建设有很大帮助。

缺点:每个中间CA证书的签名大小增加约2kb。

  • 所有

专业人员:通过附加中间CA证书加快链构建,缩短签名验证时间。

缺点:每个CA证书的签名大小增加约2kb。此选项包括根CA,它是冗余信息。如果客户端已经拥有受信任的根证书(因此它已经安装),则包含的根CA证书不提供任何有用的信息。如果客户端没有根证书,那么它在签名中的包含也没有意义。