【问题标题】:Get X509 Certificate WITH PRIVATE KEY from Azure Keyvault c#从 Azure Keyvault c# 获取带有私钥的 X509 证书
【发布时间】:2021-09-20 20:04:57
【问题描述】:

我目前正在开发一个用 C# 开发的身份验证服务器,这个服务器托管在一个 azure 函数应用程序上,我使用存储我的秘密的 KeyVault。我的问题如下,在我的密钥库中,我存储了一个证书(证书+私钥) 当我在我的代码中检索它时,但未返回私钥。如果我测试以下方法: HasPrivateKey 代码返回 false ... 但是如果我在本地使用相同的 .pfx 代码返回我是真的...... 我的代码:

 var client = new CertificateClient(vaultUri: new Uri("https://diiage2p1g3chest.vault.azure.net/"),credential: new DefaultAzureCredential());
         KeyVaultCertificate kcertificate = client.GetCertificate("try");
         var cert_content = kcertificate.Cer;
       X509Certificate2  certificate = new X509Certificate2(cert_content, "password", X509KeyStorageFlags.EphemeralKeySet);

知道问题出在哪里吗?

【问题讨论】:

    标签: c# azure-functions azure-keyvault


    【解决方案1】:

    当您使用 GetCertificate 时,您只能获得带有公钥的证书,这当然是相当烦人和令人惊讶的。因此,要获取私钥部分,您必须将其作为秘密单独获取。

    我回答了同样的问题here,在我的回答中,您还可以找到一些可以使用的代码。

    【讨论】:

    • 是的,但你的回答并没有真正帮助我。对于那些遇到同样问题的人,这里是解决方案:
    【解决方案2】:
     var _keyVaultName = $"VAULTURL";
            var secretName = "CERTIFICATENAME";
            var azureServiceTokenProvider = new AzureServiceTokenProvider();
            var _client = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
            var secret = _client.GetSecretAsync(_keyVaultName, secretName);
            var privateKeyBytes = Convert.FromBase64String(secret.Result.Value);
            certificate = new X509Certificate2(privateKeyBytes, string.Empty);
    

    我就这样解决了我的问题 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 2017-10-05
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多