这是与密钥库相关的问题。 我将pfx证书(带有私钥)存储在keyvault中。 从我的服务负责人,我试图访问密钥库以获取证书。 我正在编写以下代码来检索pfx证书。但是证书文件没有私钥 在所有身份验证正常工作的情况下,我无法获得放入的私钥文件:
var keyVaultService = new KeyVaultService(keyVaultSettings);
var pfx = await keyVaultService.GetKeyVaultSecretValue("test-cert");
Assert.IsTrue(!string.IsNullOrEmpty(pfx));
var bytes = Convert.FromBase64String(pfx);
var coll = new X509Certificate2Collection();
coll.Import(bytes, null, X509KeyStorageFlags.Exportable);
var cert = coll[0];
Assert.IsTrue(cert.HasPrivateKey); // Assert FAILS!!!
var key = cert.PrivateKey.ToString();
Console.WriteLine("private key: " + key);
答案 0 :(得分:0)
您的代码看起来不错。没什么大不了的,但是我在控制台应用程序中也很快尝试了一下,它返回cert.HasPrivateKey为true。
我假设您正在指定正确的密钥库设置,而秘密名称将恰好是您的证书名称。
我看到2个可能的原因:
您从KeyVault获得了正确的响应,但是在转换为字节时丢失了响应。示例-看这个类似的问题-How do I use the private key from a PFX certificate stored in Azure Key Vault in .NET Core 2?
您可能要检查是否将证书正确上传到KeyVault。您是否可能没有将证书正确添加到Vault中?或仅添加了pfx的公共证书部分。
如果其中任何一个都没有道理,请分享更详细的代码或要点,这样更容易分辨。