将私钥存储到 Azure KeyVault 中,值已更改

Store Private Key into Azure KeyVault, value got changed

我尝试将我的私钥存储到 Azure Key Vault,但是当我取回它时,我的私钥被更改了。

如果我将私钥放入我的 web.config 文件,它可以正常工作。

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAohoZ+TCXMn17BPFXFCuIHvh7oONSBNCjuixl2CbwrGO8tIAO
XIQP1sZa3lhXkUj0f4HewmYsx6JR+39Do21H+QtCZxR4qCvOJxrrFHqMrk76aQji
....
ZVmUljOatig+g+q+jMEf7IA5zcAgBdAAuausXrPoNcip89Yuqag1
-----END RSA PRIVATE KEY-----

由于我的私钥只是一个文本,所以我将其存储为 Secrets。我做对了吗?

我也试过将密钥存储为证书,但密钥只是带有隐藏 CRLN 的文本,它不是 PEM 或 PKCS#12。在我的例子中,我不需要存储 public 键。

下面是我检索密钥的代码:

public static string GetDocuSignPrivateKey()
{
    var key = keyVaultClient.GetSecretAsync($"{vaultUrl}secrets/DocuSignPrivateKey/88e15b41234bf89619ddc9a2exxxx").Result;

    return key.Value;
}

抱歉,我刚开始使用 Azure KeyVault。请帮忙。谢谢。

感谢@Matt Small 的回复。我使用 Azure Cloud Shell 输入私钥并且它有效。

$secretvalue = ConvertTo-SecureString 'priKey here' -AsPlainText -Force

$secret = Set-AzKeyVaultSecret -VaultName 'vaultName' -Name 'secretName' -SecretValue $secretvalue

这就是我使用 powershell 将私钥从 .ppk 文件部署到密钥库的方式。第一个是在我使用 AAD MFA 的非生产环境中,第二个是在我使用服务主体的生产环境中。

  1. AAD 多因素登录

    Connect-AzAccount -DeviceCode
    
    $fileContentInBvtes = get-content C:\Users\filedirectory\file.ppk -Encoding Byte
    $fileContentAsBase64 = [Svstem.Convert]::ToBase64String($fileContentInBytes)
    
    Set-AzKeyVaultSecret -VaultName 'CHANGEVALUETOKEYVAULTNAME' -SecretName 'CHANGEVALUETOSECRETNAME' -SecretValue (ConvertTo-SecureString -String $fileContentAsBase64 -force -AsPlainText) -ErrorAction Stop
    
  2. 服务主体

    $secPassword = ConvertTo-SecureString -AsPlainText -Force -String 'CHANGEVALUETOSERVICEPRINCIPALPASSWORD'
    $Applicationld= 'CHANGEVALUETOSERVICEPRINCIPALID'
    
    $Credential = New-Object -TypeName Svstem.Management.Automation.PSCredential -Argumentlist $Applicationld, $secPassword
    
    Connect-AzAccount -ServicePrincipal -Tenantld 'CHANGEVALUETOTENANTID' -Credential $Credential
    
    $fileContentInBvtes = get-content C:\Users\filedirectory\file.ppk -Encoding Byte
    
    $fileContentAsBase64 = [Svstem.Convert]::ToBase64String($fileContentInBytes)
    
    Set-AzKeyVaultSecret -VaultName 'CHANGEVALUETOKEYVAULTNAME' -SecretName 'CHANGEVALUETOSECRETNAME' -SecretValue (ConvertTo-SecureString -String $fileContentAsBase64 -force -AsPlainText) -ErrorAction Stop
    

在 C# 中使用以下方法将私钥添加到 Azure,而不是手动添加,然后使用获取密钥方法:

string secretName = "pKey";
string secretValue = "-----BEGIN ENCRYPTED PRIVATE KEY----\nMII9w0BBQ\nzZ8=\n-----END ENCRYPTED PRIVATE KEY-----\n";
Task addKey = client.SetSecretAsync(secretName, secretValue);
addKey.Wait();

SecretClient client = new SecretClient(new Uri(kvUri), new DefaultAzureCredential(),options);
KeyVaultSecret pKey = OKTAclient.GetSecret("pKey");                
string privateKey = pKey.Value;