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执行相同的操作?
答案 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
参数中。