KeyVault-如何从C#应用程序获取存储在keyvault中的pfx文件?

时间:2018-07-27 20:52:10

标签: c# .net azure nuget azure-keyvault

这是与密钥库相关的问题。 我将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);

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错。没什么大不了的,但是我在控制台应用程序中也很快尝试了一下,它返回cert.HasPrivateKey为true。

我假设您正在指定正确的密钥库设置,而秘密名称将恰好是您的证书名称。

我看到2个可能的原因:

  1. 您从KeyVault获得了正确的响应,但是在转换为字节时丢失了响应。示例-看这个类似的问题-How do I use the private key from a PFX certificate stored in Azure Key Vault in .NET Core 2?

  2. 您可能要检查是否将证书正确上传到KeyVault。您是否可能没有将证书正确添加到Vault中?或仅添加了pfx的公共证书部分。

如果其中任何一个都没有道理,请分享更详细的代码或要点,这样更容易分辨。