Azure 无法访问证书私钥 "Invalid provider type specified"
Azure cannot access certificate PrivateKey "Invalid provider type specified"
我们有一个 Azure 函数 (.NET 4.7.2) 运行 一年,它使用客户端证书将消息发送到 Web 服务。必须更新此证书,但现在我们已经完成,发送消息时出现此异常;
System.Security.Cryptography.CryptographicException: Invalid provider type specified.
Azure 在读取私钥时出现问题,问题似乎是从我的本地计算机导出它。这个问题会不会起源于原来的CSR?以前的证书仍然有效,只要它有效。请注意,我可以使用本地计算机上的新证书发送消息。
我尝试过的事情;
- 使用 MMC 设置的所有组合导出 .pfx 文件
- 使用 中的答案将证书密钥转换为 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 门户时似乎出了点问题。
还有什么可以尝试的吗?
为以前的证书工作的提供商不再为新证书工作。我有预感加密有问题,因为 Bag Attributes 不包含 LocalKeyID 信息,但我不能肯定。
无论如何,将提供程序更改为“Microsoft Platform Crypto Provider”可以在 Azure 中访问私钥。使用 OpenSSL:
首先从 .pfx 文件中导出 .key 和 public .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 函数 (.NET 4.7.2) 运行 一年,它使用客户端证书将消息发送到 Web 服务。必须更新此证书,但现在我们已经完成,发送消息时出现此异常;
System.Security.Cryptography.CryptographicException: Invalid provider type specified.
Azure 在读取私钥时出现问题,问题似乎是从我的本地计算机导出它。这个问题会不会起源于原来的CSR?以前的证书仍然有效,只要它有效。请注意,我可以使用本地计算机上的新证书发送消息。 我尝试过的事情;
- 使用 MMC 设置的所有组合导出 .pfx 文件
- 使用 中的答案将证书密钥转换为 RSA 格式并上传新生成的 .pfx
- 使用
CertUtil.exe -store -user my
比较新旧证书。他们都有 ProviderMicrosoft Enhanced Cryptographic Provider v1.0
,除了散列和名称外,看起来都一样。 - 从设置中删除 Azure Key Vault 并将 pfx 直接上传到应用服务
- 从本地文件夹读取 .pfx 并像这样使用它:
new X509Certificate2(certByes, "password", X509KeyStorageFlags.PersistKeySet);
。这行得通,所以在将 .pfx 文件上传到 Azure 门户时似乎出了点问题。
还有什么可以尝试的吗?
为以前的证书工作的提供商不再为新证书工作。我有预感加密有问题,因为 Bag Attributes 不包含 LocalKeyID 信息,但我不能肯定。
无论如何,将提供程序更改为“Microsoft Platform Crypto Provider”可以在 Azure 中访问私钥。使用 OpenSSL:
首先从 .pfx 文件中导出 .key 和 public .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
。