我是使用PowerShell签名代码的新手。我使用以下命令
成功创建了自签名证书和签名代码New-SelfSignedCertificate -certstorelocation cert:\LocalMachine\My -dnsname "xyz" -Type CodeSigningCert
$codecert = (Get-ChildItem cert:\LocalMachine\My\DF0E60B359BBADF625DCF4CA52C947F23713487F -CodeSigningCert)[0]
Set-AuthenticodeSignature .\test.ps1 $codecert
到目前为止这是有效的。但是,我有点惊讶它在使用证书时没有提供任何保护。如果我使用没有管理权限的其他用户登录,我也可以使用此证书签署代码。
我尝试使用参数-PIN
,如下所示:
$pwd = ConvertTo-SecureString -String "meingeheimespasswort"
New-SelfSignedCertificate -certstorelocation cert:\LocalMachine\My -dnsname "xyz" -Type CodeSigningCert -PIN $pwd
$codecert = (Get-ChildItem cert:\LocalMachine\My\DF0E60B359BBADF625DCF4CA52C947F23713487F -CodeSigningCert)[0]
Set-AuthenticodeSignature .\test.ps1 $codecert
最后一个命令Set-AuthenticodeSignature
然后返回状态“未知错误”。似乎没有像-password或-pin这样的参数。这是因为设计和自签名证书仅用于测试的原因吗?
对我来说,如果每个人都可以使用现有证书签署代码,那么这似乎是一种安全风险。
提前感谢您的帮助
马丁
答案 0 :(得分:1)
bluuf就是现场。
您将密钥存储在Windows证书库的本地计算机节点中,然后您抱怨本地计算机上的其他用户可以访问该证书。这不是一个真正的Powershell问题。这是你需要了解在哪里解决问题。
本地机器证书存储:这种类型的证书存储是 计算机本地化,对计算机上的所有用户都是全局的。
当前用户证书存储:此类证书存储是本地的 到计算机上的用户帐户。
参考:Local Machine and Current User Certificate Stores
安全密钥和证书存储本身就是一个行业。如果您想签署代码,则需要保持密钥和签名证书安全。以下是Thawte的一篇好文章:
https://www.thawte.com/code-signing/whitepaper/best-practices-for-code-signing-certificates.pdf