Azure 无法访问证书 PrivateKey“指定的提供程序类型无效”

Posted

技术标签:

【中文标题】Azure 无法访问证书 PrivateKey“指定的提供程序类型无效”【英文标题】:Azure cannot access certificate PrivateKey "Invalid provider type specified" 【发布时间】:2021-11-27 09:42:40 【问题描述】:

我们有一个运行了一年的 Azure 函数 (.NET 4.7.2),它使用客户端证书向 Web 服务发送消息。必须更新此证书,但现在我们已经完成,发送消息时收到此异常;

System.Security.Cryptography.CryptographicException: Invalid provider type specified.

Azure 在读取私钥时遇到问题,问题似乎是从我的本地计算机导出它。这个问题会不会源于最初的 CSR?只要有效,以前的证书仍然可以正常工作。请注意,我可以使用本地计算机上的新证书发送消息。 我尝试过的事情;

使用 MMC 设置的所有组合来导出 .pfx 文件 使用https://***.com/a/34103154/6033193 中的答案将证书密钥转换为 RSA 格式并上传新生成的 .pfx 使用CertUtil.exe -store -user my比较新旧证书。它们都有 Provider Microsoft Enhanced Cryptographic Provider v1.0,除了哈希值和名称之外,看起来都一样。 从设置中删除 Azure Key Vault 并将 pfx 直接上传到应用服务 从本地文件夹读取 .pfx 并像这样使用它:new X509Certificate2(certByes, "password", X509KeyStorageFlags.PersistKeySet);。这很有效,因此在将 .pfx 文件上传到 Azure 门户时似乎出现了问题。

还有什么我可以尝试的吗?

【问题讨论】:

能否请您检查一下这些类似的主题是否对您有用:SO Thread1、SO Thread2、SO Thread3 @HariKrishnaRajoli-MT 非常感谢; ***.com/questions/50921099/…" 有完全正确的提示;"Microsoft 支持建议我将提供程序更改为"Microsoft Platform Crypto Provider""。这很有效!我将添加一个操作方法作为我如何转换 pfx 的答案。 【参考方案1】:

适用于旧证书的提供程序不再适用于新证书。我有预感加密有问题,因为 Bag Attributes 不包含 LocalKeyID 信息,但我不能确定。

无论如何,将提供程序更改为“Microsoft 平台加密提供程序”使得私钥可以在 Azure 中访问。使用 OpenSSL:

首先从 .pfx 文件中导出 .key 和公共 .pem 部分;

openssl pkcs12 -in cert.pfx -out cert_publicpart.pem -nokeys
openssl pkcs12 -in cert.pfx -out cert_privatekey.key -nocerts

如果它是加密的,它会在每个命令后询问您的密码。

然后,将其转换回指定提供程序的 .pfx;

openssl pkcs12 -export -in cert_publicpart.pem -inkey cert_privatekey.key -out cert_newCSP.pfx -CSP "Microsoft Platform Crypto Provider"

再次指定密码,新的 .pfx 就可以使用了!

可选,如果您想验证 CSP:

openssl pkcs12 -in "cert_newCSP.pfx" -out "cert_newCSP.pem"

打开 .pem 文件,找到 -----BEGIN ENCRYPTED PRIVATE KEY----- 并在其上方查找 Microsoft CSP Name: Microsoft Platform Crypto Provider

【讨论】:

以上是关于Azure 无法访问证书 PrivateKey“指定的提供程序类型无效”的主要内容,如果未能解决你的问题,请参考以下文章

SSL 证书问题:无法获取本地颁发者证书 AZURE DEVOPS

Azure Api 管理 ValidateJWT 与 Rs256 PrivateKey

无法访问我创建的 azure bot 的秘密

Azure 应用服务上的受信任根证书

从 C# Azure 函数中访问证书

Azure API - 无法从 API 管理访问 API 网关 URL