我正试图在现有证书上设置KeySpec标志,以便在SQL server加密角色中使用。当前KeySpec为0,我需要它为1。
实现这一点的方法是首先将证书、其私钥和密钥用法导出到.pfx文件中(使用密码,不管它声明什么(。然后,使用certutil,运行certutil-importpfx AT_KEYEXCHANGE。
这是"有效的",因为它会提示输入密码(正确输入(,但失败时会显示以下错误消息:
CertUtil:-importPFX命令失败:0x80090029(-21468893783 NTE_NOT_SUPPORTED(CertUtil:不支持请求的操作。
不幸的是,我在网上找不到太多——显然只有这篇帖子:
https://anotherexchangeblog.wordpress.com/tag/importpfx-command-failed-0x80090029/
这似乎表明对位于C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys的目录的权限有问题。具体来说,"SYSTEM"拥有对它的权限,他删除了这些权限并使certutil正常工作。然而,我的那个目录副本没有SYSTEM权限——它看起来和他的照片一样。
没有太多要做的,这个certutil导入方法似乎是将KeySpec设置为1的唯一方法。从这里我可以做些什么来允许我导入具有正确KeySpec标志的密钥?
我在用Template=(无模板(CNG密钥生成私钥后遇到了这个问题
要从CNG密钥转换回传统密钥,可以使用OpenSSL(https://www.google.com/search?q=Download+windows+OpenSSL(来重新编码证书
-
将当前证书导出到无密码的pem
openssl pkcs12 -in mycert.pfx -out tmpmycert.pem -nodes
-
将pem文件转换为带有密码的新pfx文件:
openssl pkcs12 -export -out mycert2.pfx -in tmpmycert.pem
您可以通过使用Template=(无模板(Legacy Key 生成CSR来避免此问题
祝你好运!
我在微软工作。我的客户今天收到了这个问题,但我们无法解决。我们最终制定了一个新的CSR。
这是一篇主要文章,解释了密钥规范是如何工作的,以及CNG与传统加密服务提供商的对比。
https://learn.microsoft.com/en-us/windows-server/identity/ad-fs/technical-reference/ad-fs-and-keyspec-property
您所能做的就是转到MMC管理单元以获取证书。右键单击个人商店->所有任务->高级操作->创建自定义请求。
在没有注册策略的情况下继续操作->选择"旧版模板",->PKCS#10->下一步->细节->属性
输入一个友好的名称->添加通用名称->为您需要的任何SAN添加DNS名称->在"扩展密钥使用"上,选择"服务器和客户端身份验证"->在私钥选项卡上->选择"Microsoft强加密提供程序"->对于所需的密钥选项2048->使私钥可导出->"密钥类型"选项卡->选择Exchange
这将生成一个(CSR(证书签名请求,然后让您的授权证书填写完整。
通过指定-csp参数,可以使certutil导入使用传统的强加密提供程序。
certutil -csp "Microsoft Strong Cryptographic Provider" -importpfx -f -enterprise my mycert.pfx AT_KEYEXCHANGE