sql - CertUtil 导入 pfx 失败 : NTE_NOT_SUPPORTED

标签 sql certificate pki certutil

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

执行此操作的方法是首先将证书、其私钥和 key 用法导出到一个 .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 标志导入该 key ?

最佳答案

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

要从 CNG key 转换回旧 key ,您可以使用 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

您可以通过使用 Template = (No Template) Legacy Key 生成 CSR 来避免此问题

祝你好运!

关于sql - CertUtil 导入 pfx 失败 : NTE_NOT_SUPPORTED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61642667/

相关文章:

java - 在 Java 中自动将自签名证书合并到我的信任库中的好策略是什么?

Java X509 证书解析和验证

sql - 你如何进行多对多表外连接?

sql - MySQL中 "ORDER BY"或 "WHERE"之后的字段和索引

sql - 我可以在 plugin/index.js 文件中传递 Cypress.env 吗?

Symfony HWIOAuthBundle,如何配置 cURL?

certificate - Windows 应用商店应用测试证书已过期

java - 可以使用 java.security 生成 CSR 而不需要 sun 软件包或外部库吗?

javascript - 在现代浏览器中本地签署 PDF?

mysql - 将特定列中具有相同值的行分组