Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
KeyVault-如何从我的C#app获取存储在KeyVault中的pfx文件?_C#_.net_Azure_Nuget_Azure Keyvault - Fatal编程技术网

KeyVault-如何从我的C#app获取存储在KeyVault中的pfx文件?

KeyVault-如何从我的C#app获取存储在KeyVault中的pfx文件?,c#,.net,azure,nuget,azure-keyvault,C#,.net,Azure,Nuget,Azure Keyvault,这是一个与keyvault相关的问题。 我在keyvault中存储了一个pfx证书(带有私钥)。 从我的服务负责人那里,我正在尝试访问密钥库以获取证书。 我正在编写以下代码来检索pfx证书。但是证书文件没有私钥☹ 我无法获取在所有身份验证都有效的情况下放入的私钥文件: var keyVaultService = new KeyVaultService(keyVaultSettings); var pfx = await keyVaultService.GetKe

这是一个与keyvault相关的问题。 我在keyvault中存储了一个pfx证书(带有私钥)。 从我的服务负责人那里,我正在尝试访问密钥库以获取证书。 我正在编写以下代码来检索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);

你的代码看起来不错。虽然没什么,但我也很快在一个控制台应用程序中试用了它,它返回的cert.hasprovatekey为true

我假设您指定了正确的keyvaultsettings,而secret name正好是您的证书名

我认为有两个可能的原因:

  • 您从KeyVault获得了正确的响应,但在转换为字节时丢失了响应。示例-看看这个类似的问题-

  • 您可能需要检查是否已将证书正确上载到KeyVault。是否可能您没有将证书正确添加到vault?或仅添加pfx的公共证书部分


  • 如果其中任何一个都没有意义,请分享更详细的代码或要点,这样会更容易判断。

    我自己也遇到过类似的问题,我不会在使用powershell时发布答案,但可能与此相关:下面是一个秘密url的示例:“感谢您的回答。”。我所做的错误是,我将机密名称作为证书的名称,而不是完整的机密标识符URL。我这样做是错误的:var secret=await keyVaultClient.GetSecretAsync(“测试证书”);相反,当我这样做时,事情开始起作用:var secret=await keyVaultClient.GetSecretAsync(“);