CertUtil 导入 pfx 失败:NTE_NOT_SUPPORTED

问题描述 投票:0回答:4

我正在尝试在现有证书上设置 KeySpec 标志,以用于 SQL Server 加密角色。当前 KeySpec 是 0,我需要它是 1。

执行此操作的方法是首先将证书、其私钥和密钥用法导出到 .pfx 文件中(带有密码,无论其声明是什么)。然后,利用 certutil,运行 certutil -importpfx AT_KEYEXCHANGE。

此“有效”,因为它会提示输入密码(正确输入),但失败并显示以下错误消息:

CertUtil:-importPFX 命令失败:0x80090029(-2146893783 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 标志导入该密钥?

sql certificate pki certutil
4个回答
3
投票

我在使用 Template = (No Template) CNG Key 生成私钥后遇到了这个问题

要将 CNG 密钥转换回旧密钥,您可以使用 OpenSSL (https://www.google.com/search?q=Download+windows+OpenSSL) 重新编码证书

  1. 将当前证书导出到无密码 pem

    openssl pkcs12 -in mycert.pfx -out tmpmycert.pem -nodes

  2. 将 pem 文件转换为新的 pfx 文件,密码为:

    openssl pkcs12 -export -out mycert2.pfx -in tmpmycert.pem

您可以通过使用模板 =(无模板)旧密钥生成 CSR 来避免此问题

祝你好运!


2
投票

我在微软工作。我的客户今天收到了这个问题,但我们无法修复它。我们最终制定了新的企业社会责任。

这是解释关键规范如何工作以及 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 Strong Cryptographic Provider -> for你想要的密钥选项 2048 -> 使私钥可导出 -> 密钥类型选项卡 -> 选择 Exchange

这将生成(CSR)证书签名请求,然后让您的授权证书完整填写。


1
投票

可以通过指定 -csp 参数使 certutil 导入使用旧版强加密提供程序。

certutil -csp "Microsoft Strong Cryptographic Provider" -importpfx -f -enterprise my mycert.pfx AT_KEYEXCHANGE

0
投票

Neossian 的解决方案于 2024 年 3 月在自我分配的证书上为我工作。 ProviderType 从 0 更改为 1 (AT_KEYEXCHANGE)。 谢谢 Neo,你的帖子对我帮助很大..:)

© www.soinside.com 2019 - 2024. All rights reserved.