如何通过New-SelfSignedCertificate cmdlet创建代码签名证书

时间:2016-01-28 21:15:55

标签: powershell

PowerShell 4.0

makecert工具具有-eku选项,用于将增强型密钥用法对象标识符(OID)描述到证书中。它允许为代码签名和其他目的制作证书。但它不是cmdlet。

新的PowerShell版本具有New-SelfSignedCertificate cmdlet,用于本地测试脚本。但它创建的证书不能用于代码签名:

New-SelfSignedCertificate -DnsName www.SomeSite.com -CertStoreLocation Cert:\CurrentUser\My

我没有看到与-eku类似的选项。

如何设置新的自签名证书(通过New-SelfSignedCertificate cmdlet创建)的目标,以确定其用于代码签名的可能性?或者是否可以通过其他cmdlet执行相同的操作?

3 个答案:

答案 0 :(得分:2)

PS 4上的New-SelfSignedCertificate版本相当基本。

但是Powershell v5具有创建特定键所需的参数。

特别是Keyusage参数

-- CertSign
-- CRLSign
-- DataEncipherment
-- DecipherOnly
-- DigitalSiganture
-- EncipherOnly
-- KeyAgreement
-- KeyEncipherment
-- None (default) 
-- NonRepudiation

KeyUsageProperty参加

-- All
-- Decrypt
-- KeyAgreement
-- None (default) 
-- Sign

你是否特意与v4联系在一起?如果你可以升级到v5,你应该能够达到你所需要的。

答案 1 :(得分:0)

您可以使用PS'证书提供商访问不同的证书存储区(用户与计算机),但这对您的OID问题没有帮助。我建议您查看.NET对X509证书的支持。谷歌“.net x509证书”,您将在MSDN上找到X509Certificate类。从那里阅读类文档和任何概述文档,以了解是否支持创建OID。如果.NET不支持它,那么你必须使用P / Invoke来调用本机Windows CNG(下一代加密)API

答案 2 :(得分:0)

重提此问题,因为我也在寻找答案,以使用PowerShell New-SelfSignedCertificate命令设置用于代码签名的增强密钥用法(EKU)字段。

可以使用-TextExtension参数来设置EKU值。例如,以下PowerShell(在PowerShell 5.1上测试)脚本允许创建具有扩展密钥用法的3年自签名代码签名证书(并将其从当前用户的证书存储导出为pfx文件格式):

# Enhanced Key Usage
$EKU = "2.5.29.37"
$EKU_CODE_SIGNING = "1.3.6.1.5.5.7.3.3"

$certificate = New-SelfSignedCertificate -Subject "CN=Testing Code Signing,E=info@mycompany.com,O=My Company" `
                          -FriendlyName "My Code Signing Certificate" `
                          -NotAfter (Get-Date).AddYears(3) `
                          -CertStoreLocation Cert:\CurrentUser\My `
                          -TextExtension @("$EKU={text}$EKU_CODE_SIGNING")

$password = ConvertTo-SecureString -String "mypassword" -Force -AsPlainText

Export-PfxCertificate -Cert "Cert:\CurrentUser\My\$($certificate.Thumbprint)" -FilePath "codesigning.pfx" -Password $password

注意:作为一种快捷方式,可以使用-Type CodeSigningCert命令指定New-SelfSignedCertificate参数,而不是将EKU_CODE_SIGNING字符串显式添加到-TextExtension参数中。