gpt4 book ai didi

powershell - 使用自签名证书(并且不使用 makecert.exe)对 PowerShell 脚本进行签名

转载 作者:行者123 更新时间:2023-12-04 12:51:38 31 4
gpt4 key购买 nike

我正在尝试签署 .ps1使用自签名证书(用例是我自己在私有(private)开发站上编写的脚本,因此无需使用 - 或付费 -
一个真正的 CA)。但是,无论我阅读了多少关于证书生成和数字签名主题的指南,我似乎都无法让它发挥作用。

这是我到目前为止所取得的成就:

# Create a certificate to use as trusted root of the signing chain
$root = New-SelfSignedCertificate `
-Subject "CN=PowerShell Trusted Authority" `
-FriendlyName "PowerShell Trusted Authority" `
-KeyUsageProperty Sign `
-KeyUsage CertSign, CRLSign, DigitalSignature `
-CertStoreLocation Cert:\LocalMachine\My\ `
-NotAfter (Get-Date).AddYears(10)

# Create a certificate to use for signing powershell scripts
New-SelfSignedCertificate `
-Signer $root `
-Subject "CN=PowerShell Code Signing" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-Type CodeSigningCert `
-CertStoreLocation Cert:\LocalMachine\My\

# Move the root cert into Trusted Root CAs
Move-Item "Cert:\LocalMachine\My\$($root.Thumbprint)" Cert:\LocalMachine\Root

以上所有操作都是通过管理 powershell 实例完成的。完成后,我可以在管理控制台中的预期位置看到这两个证书,并且签名证书的证书路径 checkout 为有效。

然后我打开一个常规的 PS 提示符并尝试签署脚本:
# Obtain a reference to the signing certificate
PS> $cert = Get-ChildItem Cert:\LocalMachine\My\ -CodeSigningCert

# Attempt at signing
PS> Set-AuthenticodeSignature .\Microsoft.PowerShell_profile.ps1 $cert


Directory: C:\Users\tomas\Documents\WindowsPowerShell


SignerCertificate Status Path
----------------- ------ ----
UnknownError Microsoft.PowerShell_profile.ps1

如您所见,实际签名失败。查看 powershell 文件,我发现脚本没有附加任何签名。

如果我从管理员提示符下进行签名,我似乎会走得更远一些;一个签名 block 被添加到脚本中,并且签名证书的指纹打印在 Set-AuthenticodeSignature 的输出中。 ,但状态仍为 UnknownError并在 AllSigned 下执行政策仍然不允许。
# Output some info about the certificate:
PS> $cert | Format-List

Subject : CN=PowerShell Code Signing
Issuer : CN=PowerShell Trusted Authority
Thumbprint : <omitted>
FriendlyName :
NotBefore : 9/20/2017 10:48:59 PM
NotAfter : 9/20/2018 11:08:59 PM
Extensions : {System.Security.Cryptography.Oid, System.Security.Cryptography.Oid,
System.Security.Cryptography.Oid, System.Security.Cryptography.Oid}

我尝试了 New-SelfSignedCertificate 的多种变体咒语,尤其是生成用于代码签名的证书,但始终带有相同的状态消息( UnknownError)。

我在这里的最终目标是能够拥有 Set-ExecutionPolicy AllSigned并且仍然运行我自己创建的脚本。我在这个过程中缺少什么来完成这项工作?

最佳答案

$cert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -Type CodeSigningCert -Subject "Code Signing"

Move-Item -Path $cert.PSPath -Destination "Cert:\CurrentUser\Root"

Set-AuthenticodeSignature -FilePath c:\go.ps1 -Certificate $cert

来源
https://blogs.u2u.be/u2u/post/creating-a-self-signed-code-signing-certificate-from-powershell

关于powershell - 使用自签名证书(并且不使用 makecert.exe)对 PowerShell 脚本进行签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331902/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com