我正在尝试创建必要的基础设施,以允许授权用户签署 PowerShell 脚本并让它们受到组织的信任,这允许将脚本部署到具有 AllSigned 执行策略的计算机。这是我设想的过程:
- Windows 证书颁发机构服务服务器创建 RootCA (RootCA.cer)。
- 该服务器内有一个代码签名证书的证书模板。
- RootCA 通过组策略部署到所有计算机,并放入受信任的发布者存储中。
- 用户使用模板 (CodeSigningCert.cer) 请求代码签名证书,该证书由 RootCA 签名和验证。
此时,代码签名证书 (CodeSigningCert.cer) 是 RootCA (RootCA.cer) 的委托,根据我的假设,它应该有资格成为受信任的发布者,因为其父证书 (RootCA.cer) 位于受信任的发布者存储中。
但是,如果我使用此证书签署 PowerShell 脚本:
$cert = Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert
Set-AuthenticodeSignature -FilePath "Z:\PowerShellTest.ps1" -Certificate $cert
然后尝试运行它,我收到:
Do you want to run software from this untrusted publisher?
相比之下,如果我手动将 CodeSigningCert.cer 本身添加到受信任的发布者存储中,那么 Windows 会愉快地运行 PowerShell 脚本,因为它是受信任的。
请告诉我:
- 我是否错误地假设这就是 AuthenticodeSignature 签名链的工作原理?(只有家长需要被信任,代表可以签署脚本)
- 如果我弄错了,作为一个组织签署 PowerShell 脚本的理想方式是什么?
- 如果我没记错的话,我做错了什么?
感谢您提供的任何帮助。