.net Azure KeyVault GetKeyAsync返回参数,而不是X509Certificate

.net Azure KeyVault GetKeyAsync返回参数,而不是X509Certificate,.net,encryption,rsa,x509certificate,azure-keyvault,.net,Encryption,Rsa,X509certificate,Azure Keyvault,我在Azure KeyVault中的密钥下存储了一个X509证书 当我使用keyVaultClient.GetKeyAsynckeyUrl时,它返回一个带有Keys属性的keyBundle Keys属性具有ToRSA函数 通过RSA对象,我可以创建一个XML字符串,但该格式不是PEM格式的公钥,我可以在X509Certificate2构造函数中将其用作原始数据 我在.NET framework中找不到任何从RSA xml创建X509Certificate2的方法 我真的需要一个X509Certi

我在Azure KeyVault中的密钥下存储了一个X509证书

当我使用keyVaultClient.GetKeyAsynckeyUrl时,它返回一个带有Keys属性的keyBundle

Keys属性具有ToRSA函数

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

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

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

有没有办法将RSA算法转换为X509Certificate2对象


一种解决方法是将证书秘密存储。然后密钥库API似乎给了我X509Certificate原始数据,但我只想存储同一个证书一次。我必须将其置于密钥下,才能为Cms对象解密打开密钥

您应该将证书与密钥一起存储在vault中,然后调用KeyVault Client.GetCertificateAysyncURL并获取已存储在vault中的证书。虽然我认为这与证书是分开的,所以这不是一个完美的解决方案


单凭密钥还不足以构造一个证书,因为加密只需要几个数字。它没有名字、发行人或有效期之类的东西。要出示证书,你必须当场填写所有这些内容,然后以某种方式在证书上签名。。。这可能不适用于您的场景。

Azure密钥库中密钥的目的是加强加密,密钥库中的密钥用于签名/加密/解密操作。您得到的返回只是JWT JSON Web令牌形式的密钥信息。你们可以得到RSA模,然后把它转换成公共部分的形式,我不确定。但是密钥的主要用途不是存储证书并下载它

如果要使用存储在密钥中的加密密钥执行加密,可以使用.NET client EncryptAsync


如果您想维护证书并下载它,我在这里的另一个线程中给出了我的方法

我也注意到了这一点-那么,不可能走另一条路。client.GetSecretAsyncsecretUrl,将X509证书原始数据字符串作为base64传递。它是一个pitty键Vault键只返回参数。我需要在密钥下有证书,因为解包原语解密Cms对象。我可能会为每个证书使用两个存储—私有证书的密钥和带有公钥数据pem的文件系统。从长远来看,它可能也更便宜。谢谢你的回答,查德