【问题标题】:Azure KeyVault GetKeyAsync returns RSAParameters and not X509CertificateAzure KeyVault GetKeyAsync 返回 RSAParameters 而不是 X509Certificate
【发布时间】:2018-02-10 02:36:43
【问题描述】:

我已将 X509 证书存储在 Azure KeyVault 中(在 Keys 下)。

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

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

从 RSA 对象,我能够创建一个 XML 字符串,但格式不是 PEM 格式的公钥,我可以在 X509Certificate2 构造函数中用作原始数据。

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

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

有没有办法将RSA(非对称算法)转换为X509Certificate2 对象?

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

【问题讨论】:

    标签: .net encryption rsa x509certificate azure-keyvault


    【解决方案1】:

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

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

    【讨论】:

    • 我也注意到了——那么不可能走另一条路。 client.GetSecretAsync(secretUrl),提供 X509Certificate 原始数据字符串(作为 base64)。它的一个可怜的 Key Vault Keys 只返回 RSAParameters。由于 unwrap 原语(解密 Cms 对象),我需要在 Keys 下拥有证书。我可能会为每个证书使用两个存储 - “私有”证书的密钥和带有公钥数据 (pem) 的文件系统。从长远来看,它可能也更便宜。谢谢你的回答,乍得
    【解决方案2】:

    Azure Key Vault 中的密钥的目的是加强加密,密钥存储中的密钥用于签名/加密/解密操作。您得到的返回只是 JWT(JSON Web Token)形式的密钥信息。您可以获得 RSA Modulus 并将其转换为公共部分的形式(我不确定)。但是 Keys 的主要目的不是存储证书并下载它。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多