gpt4 book ai didi

azure - 使用 Azure Key Vault 证书解密返回错误

转载 作者:行者123 更新时间:2023-12-03 05:30:35 26 4
gpt4 key购买 nike

我有一个使用 OpenSSL 创建的自签名 2048 位 key 。我已将从中创建的证书上传到 Azure Key Vault,打算访问它。我注意到,当从我的应用程序(asp.net 3.1;从本地环境)调用指向 Azure Key Vault 时,它失败了!但是,如果我使用指向本地驱动器的相同证书,它就可以工作。

请注意,我仅从本地环境运行,尚未将其托管在云中,在本例中为 Azure。

我在 decryptedResponseData = Encoding.UTF8.GetString( rsa.Decrypt(Convert.FromBase64String(s),RSAEncryptionPadding. Pkcs1));

此外,我在调试过程中注意到,如果我从 Azure Key Vault 获取证书,PrivateKey 属性将返回 null 并且 HasPrivateKey 为在 var rsa = (RSACng)cert.PrivateKey;

设置为 false

如果我从本地驱动器访问相同的证书,则此代码有效:

private static X509Certificate2 cert = new X509Certificate2(@"C:\<Dummy Path>\My.pfx", ""); //No password


public static string Decrypt(this string s)
{
if (string.IsNullOrWhiteSpace(s)) return "";

//var cert = GetCertificate();
var decryptedResponseData = string.Empty;
var rsa = (RSACng)cert.PrivateKey;
var raw = cert.RawData;

decryptedResponseData = Encoding.UTF8.GetString( rsa.Decrypt(Convert.FromBase64String(s),RSAEncryptionPadding.Pkcs1));

return decryptedResponseData;
}

但是如果我使用上传到 Key Vault 的相同证书,则会收到错误:

public static string Decrypt(this string s) 
{
if (string.IsNullOrWhiteSpace(s)) return "";

var cert = GetCertificate();
var decryptedResponseData = string.Empty;
var rsa = (RSACng)cert.PrivateKey; //returns null
var raw = cert.RawData;

decryptedResponseData = Encoding.UTF8.GetString( rsa.Decrypt(Convert.FromBase64String(s),RSAEncryptionPadding.Pkcs1));

return decryptedResponseData;
}



private static X509Certificate2 GetCertificate()
{
var azureCredentialOptions = new DefaultAzureCredentialOptions();
#if DEBUG
azureCredentialOptions.SharedTokenCacheUsername = "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="086c6d7e67787b486c7d65657126676665616b7a677b676e7c266b6765" rel="noreferrer noopener nofollow">[email protected]</a>";
#endif
var client = new CertificateClient(vaultUri: new Uri("https://dummyKeyVault.vault.azure.net/"),
credential: new DefaultAzureCredential(azureCredentialOptions));
var cert = client.GetCertificate("me-int");

return new X509Certificate2(cert.Value.Cer);
}

`

我在这里做错了什么吗?请帮助我。

最佳答案

从 Key Vault 下载的证书默认不包含私钥。您可以将证书作为 secret 下载并检索整个内容。

请参阅本博客文章的第 2 节,了解如何以 secret 形式下载证书。您可以转换为 C#:https://azidentity.azurewebsites.net/post/2018/05/17/azure-key-vault-app-service-certificates-finding-downloading-and-converting

关于azure - 使用 Azure Key Vault 证书解密返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65820824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com