使用 Makecert 设置密钥使用属性

Posted

技术标签:

【中文标题】使用 Makecert 设置密钥使用属性【英文标题】:Setting Key Usage attributes with Makecert 【发布时间】:2011-02-26 15:45:58 【问题描述】:

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

我感兴趣的原因是用于 BizTalk Server AS2 传输的证书需要使用数字签名的密钥进行签名和数据加密或密钥加密用于加密/解密,我想尝试使用此功能。

我知道如何使用 makecert 设置 enhanced 密钥使用属性,但不是密钥使用。

【问题讨论】:

我认为您正在寻找-sky 选项 【参考方案1】:

虽然您无法制作自签名证书并使用 makecert 设置增强型密钥使用参数,但我想我可以省去每个人尝试使用 OpenSSL 在 Windows 上生成证书的麻烦。相反,您可以使用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 的证书,用于测试。

更多详情:https://technet.microsoft.com/en-us/library/dn296456.aspx#BKMK_New

【讨论】:

使用makecert,您可以使用-eku 设置扩展密钥用法,但我正在寻找一种方法来设置两个或更多扩展密钥用法。 这种方法解决了我在使用New-SelfSignedCertificate 时遇到的“指定的提供程序类型无效”错误。谢谢!【参考方案2】:

可以使用 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=text1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.1") -CertStoreLocation "Cert:\CurrentUser\My"

该示例涵盖客户端身份验证和服务器身份验证,并在 my 下的当前用户存储中创建证书。

【讨论】:

我希望我能给这 1000 个赞。在搞砸了一天 makecert 和 openssl 之后,这解决了我的问题。【参考方案3】:

MakeCert 不允许您指定密钥用法,只能指定扩展密钥用法。我认为您需要 CA 来创建更广泛的证书。

您可以使用 ubuntu 服务器设置自己的 CA。 https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04

【讨论】:

【参考方案4】:

您可以使用 -eku 选项来指定证书的密钥用法。

在此处查看详细信息: http://msdn.microsoft.com/en-us/library/aa386968(VS.85).aspx

【讨论】:

-eku 让您设置扩展键用法,而不是键用法。 嗯,我明白了...在这种情况下,我建议您尝试使用 Openssl 生成您的证书。我不知道使用 openssl 解决您的具体问题的答案,但它是一个强大的工具(在我看来比 makecert 更好)。我建议您在问题中添加“openssl”标志并将标题更改为“makecert/Openssl”。也许这样你会得到更有帮助的答案。关注

以上是关于使用 Makecert 设置密钥使用属性的主要内容,如果未能解决你的问题,请参考以下文章

如何用makecert生成数字证书!

使用makecert.exe创建自签名CA证书

利用SCVMM 2012 R2来管理Azure虚拟机

如何使用 makecert 创建 WCF 接受的 X509 证书

使用RSACryptoServiceProvider从XML导入RSA公钥会将属性PublicOnly设置为false

使用 makecert/pvk2pfx 时,ClickOnce 签名者的证书对签名无效