PowerShell代码签名:如何使用带密码保护的自签名证书?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PowerShell代码签名:如何使用带密码保护的自签名证书?相关的知识,希望对你有一定的参考价值。

我是使用PowerShell签名代码的新手。我使用以下命令成功创建了自签名证书和签名代码

New-SelfSignedCertificate -certstorelocation cert:LocalMachineMy -dnsname "xyz" -Type CodeSigningCert
$codecert = (Get-ChildItem cert:LocalMachineMyDF0E60B359BBADF625DCF4CA52C947F23713487F -CodeSigningCert)[0]
Set-AuthenticodeSignature .	est.ps1 $codecert

这到目前为止工作。但是,我有点惊讶它在使用证书时没有提供任何保护。如果我使用没有管理权限的其他用户登录,我也可以使用此证书签署代码。

我尝试使用像这样的参数-PIN

$pwd = ConvertTo-SecureString -String "meingeheimespasswort"
 New-SelfSignedCertificate -certstorelocation cert:LocalMachineMy -dnsname "xyz" -Type CodeSigningCert -PIN $pwd
$codecert = (Get-ChildItem cert:LocalMachineMyDF0E60B359BBADF625DCF4CA52C947F23713487F -CodeSigningCert)[0]
Set-AuthenticodeSignature .	est.ps1 $codecert

最后一个命令Set-AuthenticodeSignature然后返回状态“未知错误”。似乎没有像-password或-pin这样的参数。这是设计和自签名证书据说仅用于测试的原因吗?

对我来说,如果每个人都可以使用现有证书来签署代码,那么这似乎是一种安全风险。

在此先感谢您的帮助

马丁

答案

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

以上是关于PowerShell代码签名:如何使用带密码保护的自签名证书?的主要内容,如果未能解决你的问题,请参考以下文章

受域保护的 pfx 需要啥密码?

如何在 PowerShell 中使用 S/MIME 对消息进行签名和加密

如何使用ssh登录linux服务器

Python 发送带自签名证书的 https 请求

Linux实战之SSL自签名证书

如何信任 Windows Powershell 中的证书