Windows

在 Windows 上創建程式碼簽名證書以簽署 PowerShell 腳本

  • August 7, 2019

根據本指南,我嘗試創建用於簽署 PowerShell 腳本的證書:

CD C:\OpenSSL-Win32\bin
REM Create the key for the Certificate Authority.  2048 is the bit encryptiong, you can set it whatever you want
openssl genrsa -out C:\Test\ca.key 2048
openssl req -config C:\OpenSSL-Win32\bin\openssl.cfg -new -x509 -days 1826 -key C:\Test\ca.key -out C:\Test\ca.crt
REM Now I'm creating the private key that will be for the actual code signing cert
openssl genrsa -out C:\Test\codesign.key 2048
openssl req -config C:\OpenSSL-Win32\bin\openssl.cfg -new -key C:\Test\codesign.key -reqexts v3_req -out C:\Test\codesign.csr
openssl x509 -req -days 1826 -in C:\Test\codesign.csr -CA C:\Test\ca.crt -CAkey C:\Test\ca.key -extfile C:\OpenSSL-Win32\bin\cnf\opensslTest.cnf -set_serial 01 -out C:\Test\codesign.crt
openssl pkcs12 -export -out C:\Test\codesign.pfx -inkey C:\Test\codesign.key -in C:\Test\codesign.crt

出現以下錯誤:

C:\OpenSSL-Win32\bin>openssl x509 -req -days 1826 -in C:\Test\codesign.csr -CA C:\Test\ca.crt -CAkey C:\Test\ca.key -extfile C:\OpenSSL-Win32\bin\cnf\openssl.cnf -set_serial 01 -out C:\Test\codesign.crt
Error Loading extension section default
14516:error:22097082:X509 V3 routines:do_ext_nconf:unknown extension name:crypto\x509v3\v3_conf.c:78:
14516:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:crypto\x509v3\v3_conf.c:47:name=HOME, value=.

我使用了 OpenSSL v1.1.0c。我發現的所有其他指南都會創建不可用於程式碼簽名的證書。

Windows 上的 OpenSSL 不需要。在 Windows 7 上,您可以使用我在 TechNet 腳本庫上發布的我自己的 PowerShell 腳本:自簽名證書生成器 (PowerShell)。用法可以是這樣的:

New-SelfsignedCertificateEx -Subject "CN=Test Code Signing" `
-EKU "Code Signing" `
-KeySpec "Signature" `
-KeyUsage "DigitalSignature" `
-FriendlyName "Test code signing" `
-NotAfter $([datetime]::now.AddYears(5))

(第一個例子)。

從 Windows 8 開始,您可以使用內置工certreq.exe俱生成證書。使用證書配置創建 INF 文件,例如:

[NewRequest]
Subject = "CN=Test Code Signing"
KeyLength = 2048
KeyAlgorithm = RSA
ProviderName = "Microsoft Enhanced RSA and AES Cryptographic Provider"
MachineKeySet = false
Exportable = true
KeySpec = 2
KeyUsage = 0x80
RequestType = Cert
[EnhancedKeyUsageExtension]
OID=1.3.6.1.5.5.7.3.3 ; Code signing

然後執行以下命令:

Certreq –new path\inffilename.inf

這將生成證書並將其安裝到目前使用者的證書儲存中。

從 Windows 10 開始,您可以使用內置的 PowerShell cmdlet,如下所示:

New-SelfSignedCertificate -CertStoreLocation cert:\currentuser\my `
-Subject "CN=Test Code Signing" `
-KeyAlgorithm RSA `
-KeyLength 2048 `
-Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" `
-KeyExportPolicy Exportable `
-KeyUsage DigitalSignature `
-Type CodeSigningCert

但是,不鼓勵在生產環境中使用自簽名證書進行程式碼簽名。您應該只在測試環境中使用它們。

對於私人使用(僅限組織內部),您應該檢查公司是否已經擁有 PKI 基礎設施並聯繫適當的人員以獲得公司批准的程式碼簽名證書。

對於公共腳本(您將與軟體包一起分發,或將腳本傳遞給您的客戶),我建議從全球受信任的商業 CA 提供商處購買程式碼簽名。

引用自:https://serverfault.com/questions/824574