如何在 Azure Key Vault 中存储 Public 证书(.cer 文件)

How to store Public Certiticate (.cer file) in Azure Key Vault

如何在 azure keyvault 中上传或存储 public 密钥 (.cer) 文件。当我尝试上传适用于 .pfx 文件的任何 .cer 文件时,在 keyvault 面板中出现错误。

您应该考虑 Key Vault 是否适合您的方案。 public 密钥(本质上)不是机密数据,您不需要安全的地方来存储它。您可以为其使用通用存储服务。

如果您仍然需要使用Key Vault,您可以将其存储为机密。 Key Vault 机密是八位字节序列,每个序列的最大大小为 25k 字节。

正在加载 Public 个密钥证书

Azure Key Vault Explorer 允许您加载 public 密钥证书(.cer 文件)。

证书使用该应用程序使用的 "standard" 格式作为密钥存储在 Key Vault 中(因为 Azure Key Vault 本身不支持 .cer 文件)。

正在访问 Public 密钥证书

将 public 个密钥加载到 Azure Key Vault 后,就可以按如下方式以编程方式访问它们:

// load certificate based on format used by `Azure Key Vault Explorer`
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
var certBundle = await kv.GetSecretAsync(secretIdentifier).ConfigureAwait(false);

byte[] certBytes = null;
if (certBundle.ContentType == "application/x-pkcs12")
{
    certBytes = Convert.FromBase64String(certBundle.Value);
}
else if (certBundle.ContentType == "application/pkix-cert")
{
    certBytes = certBundle?.Value.FromJson<PublicKeyCertificate>()?.Data;
}
if (certBytes != null && certBytes.Length > 0)
{
    return new X509Certificate2(certBytes,
        "",
        X509KeyStorageFlags.Exportable |
        X509KeyStorageFlags.MachineKeySet |
        X509KeyStorageFlags.PersistKeySet);
}
return null;

...

// class used to access public key certificate stored in Key Vault
public class PublicKeyCertificate
{
    public byte[] Data;
}