从 Azure Keyvault c# 获取带私钥的 X509 证书
Get X509 Certificate WITH PRIVATE KEY from Azure Keyvault c#
我目前正在使用 C# 开发的身份验证服务器,该服务器托管在 azure 函数应用程序上,我使用存储我的机密的 KeyVault。我的问题如下,在我的密钥库中,我存储了一个证书(证书+私钥)
当我在我的代码中检索它时,私钥不是 returned。如果我测试以下方法:HasPrivateKey 代码 returns false ...
但是如果我在本地使用相同的 .pfx 代码 return 我是真的......
我的代码:
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);
知道问题出在哪里吗?
当您使用 GetCertificate 时,您只能获得带有 public 密钥的证书,这当然很烦人和令人惊讶。所以,要获取私钥部分,就得单独获取,作为secret。
我回答了同样的问题,在我的回答中你也找到了一些你可以使用的代码。
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);
我就这样解决了我的问题:)
我目前正在使用 C# 开发的身份验证服务器,该服务器托管在 azure 函数应用程序上,我使用存储我的机密的 KeyVault。我的问题如下,在我的密钥库中,我存储了一个证书(证书+私钥) 当我在我的代码中检索它时,私钥不是 returned。如果我测试以下方法:HasPrivateKey 代码 returns false ... 但是如果我在本地使用相同的 .pfx 代码 return 我是真的...... 我的代码:
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);
知道问题出在哪里吗?
当您使用 GetCertificate 时,您只能获得带有 public 密钥的证书,这当然很烦人和令人惊讶。所以,要获取私钥部分,就得单独获取,作为secret。
我回答了同样的问题
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);
我就这样解决了我的问题:)