2017-09-13 81 views
0

我已经存储了一个X509证书Azure KeyVault(在Keys下)。Azure KeyVault GetKeyAsync返回RSAParameters而不是X509Certificate

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

Keys财产有一个ToRSA()函数。

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

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

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

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

解决方法可能是将证书存储在秘密下。然后关键的Vault API似乎给了我X509Certificate rawdata,但我想只存储一次相同的证书。我必须拥有它才能够解开密钥(用于Cms对象解密)

回答

1

您应该将证书和密钥一起存储在Vault中,然后拨打keyVaultClient.GetCertificateAsync(url)并获取已存储在证书中的证书金库。尽管我认为这与证书还是分开的,但它不是一个完美的解决方案。

仅凭这个密钥就不足以构建证书,因为它只是少数几个需要进行加密的数字。它不具有名称,发行人或有效期限等内容。要制作证书,您必须现场制作所有这些内容,然后以某种方式签署证书......这可能不适合您的方案。

+0

我刚刚注意到,那也是 - 不可能以其他方式去做。 client.GetSecretAsync(secretUrl)提供了一个X509Certificate原始数据字符串(作为base64)。它的一个可怜的钥匙保险箱钥匙只返回RSAParameters。由于unwrap原语(解密Cms对象),我需要在Keys下有证书。我可能会去每个证书两个商店 - 钥匙为“私人”证书和文件系统与公共密钥数据(pem)。从长远来看,它可能更便宜。 谢谢你的回答,乍得 – Frode

0

Azure密钥库中的Keys的用途是加强密码的更多功能,Keys存储中的密钥用于签名/加密/解密操作。您获得的回报只是JWT(JSON Web令牌)形式的密钥信息。你可以得到RSA Modulus并将其转换成公共部分的形式(我不确定)。但Keys的主要目的不是存储证书并下载它。

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

如果你想保持你的证书和下载它,我把我在另一个线程的方法在这里Getting pem file uploaded in Azure Key Vault Keys