Azure KeyVault GetKeyAsync returns RSAParameters 而不是 X509Certificate

Azure KeyVault GetKeyAsync returns RSAParameters and not X509Certificate

我已将 X509 证书存储在 Azure KeyVault(在密钥下)。

当我使用 keyVaultClient.GetKeyAsync(keyUrl) 时,它 returns 一个带有 Keys 属性 的 keyBundle。

Keys 属性 有一个 ToRSA() 函数。

从 RSA 对象,我能够创建一个 XML 字符串,但格式不是 public 密钥的 PEM 格式,我可以在 X509Certificate2构造函数。

我在 .NET 框架中找不到任何方法来从 RSA 创建 X509Certificate2 xml。

我真的需要一个 X509Certificate2 对象来加密封装的 Cms 对象。 CmsRecipient 在其构造函数中需要 X509Certificate

有没有办法将 RSA (AsymmetricAlgorithm) 转换成 X509Certificate2 对象?

解决方法是将证书存储在 Secrets 下。然后密钥库 API 似乎给了我 X509Certificate 原始数据,但我只想存储同一个证书一次。我必须把它放在 Keys 下才能解包密钥(用于 Cms 对象解密)

您应该将证书连同密钥一起存储在保管库中,然后调用 keyVaultClient.GetCertificateAsync(url) 并获取已存储在保管库中的证书。虽然我认为这仍然与证书分开,所以它不是一个完美的解决方案。

仅凭密钥不足以构建证书,因为它只需要少量数字即可进行加密。它没有名称、发行人或有效期等内容。要生成证书,您必须当场制作所有这些东西,然后以某种方式签署证书……这可能不适用于您的场景。

Azure Key Vault 中的密钥的目的是加强加密,密钥存储中的密钥用于 signing/encrypting/decrypting 操作。您得到的 return 只是 JWT 形式的密钥信息(JSON Web Token)。您可以获得 RSA 模数并将其转换为 public 部分的形式(我不确定)。但是 Keys 的主要目的不是存储证书和下载证书。

如果您想使用您的加密密钥(存储在 Keys 中)执行加密,您可以使用 .NET 客户端 EncryptAsync()

如果你想维护你的证书并下载它,我在这里的另一个线程中给出了我的方法Getting pem file uploaded in Azure Key Vault Keys