使用Makecert设置密钥用途属性

20

是否可以使用makecert或其他工具设置密钥用途属性以生成自己的测试证书?

我感兴趣的原因是,BizTalk Server AS2传输所使用的证书要求数字签名的密钥用途用于签名,数据加密或密钥加密的密钥用途用于加密/解密。我想尝试这个功能。

我知道如何使用makecert设置“增强”的密钥用途属性,但不知道如何设置密钥用途。


我认为你正在寻找“-sky”选项。 - AaA
4个回答

7
虽然您无法使用makecert创建自签名证书并设置增强密钥用途参数,但我想为大家节省尝试在Windows上使用OpenSSL生成证书的麻烦。相反,您可以使用certreq(如果您已经有makecert),并制作自己的请求以设置所需的参数。
例如,这将设置具有文档加密(1.3.6.1.4.1.311.80.1)的EKU和密钥用途为密钥加密和数据加密的证书。
创建一个新文件MyCert.inf
[Version]
Signature = "$Windows NT$"

[Strings]
szOID_ENHANCED_KEY_USAGE = "2.5.29.37"
szOID_DOCUMENT_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

[NewRequest]
Subject = "cn=me@example.com"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert

KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE | CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"

[Extensions]
%szOID_ENHANCED_KEY_USAGE% = "{text}%szOID_DOCUMENT_ENCRYPTION%"

只需将Subject设置为所需内容。

然后运行:

certreq -new MyCert.inf MyCert.cer

这将生成公钥(X509证书)并将其安装到计算机的当前用户个人存储中。如果需要,您可以从那里导出它。
我使用此方法为测试加密PowerShell DSC生成证书。

Example cert

更多详情请参考:https://technet.microsoft.com/zh-cn/library/dn296456.aspx#BKMK_New


使用 makecert 命令,您可以使用 -eku 来设置扩展密钥用途,但我正在寻找一种设置两个或更多扩展密钥用途的方法。 - AaA
这种方法让我避免了在使用New-SelfSignedCertificate时出现的“指定的提供程序类型无效”错误。谢谢! - rsbarro

1
可以使用PowerShell Cmdlet New-SelfSignedCertificate添加数字签名、数据加密和密钥加密。其中一个New-SelfSignedCertificate参数是KeyUsage,您可以在其中添加DigitalSignature、DataEncipherment和KeyEncipherment。 New-SelfSignedCertificate在technet上有描述(https://technet.microsoft.com/library/hh848633)。
示例:
New-SelfSignedCertificate -Type Custom -Subject "CN=sample.com" -KeyUsage DataEncipherment, KeyEncipherment, DigitalSignature -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1") -CertStoreLocation "Cert:\CurrentUser\My"

本示例涵盖了客户端认证(1.3.6.1.5.5.7.3.2)和服务器认证(1.3.6.1.5.5.7.3.1),并在当前用户存储库下创建名为my的证书。

示例中使用的对象标识符在RFC 3280第4.2.1.13节“扩展密钥用途”中提到。


我希望我能给这个1000个赞。经过一天的折腾,使用makecert和openssl后,这个解决方案解决了我的问题。 - Jeroen Ritmeijer
请注意,OID 1.3.6.1.5.5.7.3.2和1.3.6.1.5.5.7.3.3用于SSL客户端和服务器认证。-TextExtension OID的数据加密至少有些牵强附会,并取决于平台。Microsoft Crypto 2文件系统的数据加密似乎是 1.3.6.1.4.1.311.10.3.4 - Reahreic
@Reahreic "3" 用于代码签名,服务器身份验证是"1"。我已经通过添加相应的RFC并更加明确地说明这一点来更新我的答案。 示例中使用的OID都不是特定于平台的。FYI,扩展密钥用途可以在ISO/IEC 9594-8(2001)中找到。 - Florian Haupt
@Florian 您说得对,我在输入评论时可能手指有点肥胖。感谢您提供的 RFC 和 ISO 参考文献。我会更深入地研究它们,因为我之前只是利用 https://oidref.com/ 来查找它们,并且在寻找离线文件加/解密的文件加密 OID 时遇到了困难。 - Reahreic

0

-4

3
-eku允许您设置扩展密钥用途,而不是密钥用途。 - nlawalker
1
嗯,我明白了……在这种情况下,我建议你尝试使用Openssl来生成证书。我不知道如何使用openssl解决您的具体问题,但它是一个功能强大的工具(我认为比makecert更好)。我建议您将“openssl”标志添加到您的问题中,并将标题更改为“makecert / Openssl”。也许这样你会得到更多有用的答案。问候 - Zé Carlos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接