Inicio rápido: Biblioteca cliente de certificados de Azure Key Vault para .NET (SDK v4)

Empiece a trabajar con la biblioteca cliente de certificados de Azure Key Vault para .NET. Azure Key Vault es un servicio en la nube que proporciona un almacén seguro para los certificados. Puede almacenar de forma segura claves, contraseñas, certificados y otros secretos. Las instancias de Azure Key Vault se pueden crear y administrar a través de Azure Portal. En este inicio rápido, aprenderá a crear, recuperar y eliminar certificados de una instancia de Azure Key Vault mediante la biblioteca cliente de .NET.

Recursos de la biblioteca cliente de Key Vault:

Documentación de referencia de la API | Código fuente de la biblioteca | Paquete (NuGet)

Para más información sobre Key Vault y los certificados, consulte:

Requisitos previos

En este inicio rápido se usa dotnet y la CLI de Azure.

Configurar

En este inicio rápido se usa la biblioteca de identidades de Azure con la CLI de Azure para autenticar al usuario en los servicios de Azure. Los desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar sus llamadas. Para más información, consulte Autenticación del cliente mediante la biblioteca cliente Azure Identity.

Inicio de sesión en Azure

  1. Ejecute el comando login.

    az login
    

    Si la CLI puede abrir el explorador predeterminado, lo hará y cargará una página de inicio de sesión de Azure.

    En caso contrario, abra una página del explorador en https://aka.ms/devicelogin y escriba el código de autorización que se muestra en el terminal.

  2. Inicie sesión con las credenciales de su cuenta en el explorador.

Concesión de acceso al almacén de claves

Cree una directiva de acceso para el almacén de claves que conceda permisos de certificado a la cuenta de su usuario

az keyvault set-policy --name <your-key-vault-name> --upn user@domain.com --certificate-permissions delete get list create purge

Creación de una aplicación de consola de .NET

  1. En un shell de comandos, ejecute el siguiente comando para crear un proyecto llamado key-vault-console-app:

    dotnet new console --name key-vault-console-app
    
  2. Cambie al directorio key-vault-console-app recién creado y ejecute el comando siguiente para compilar el proyecto:

    dotnet build
    

    La salida de la compilación no debe contener advertencias ni errores.

    Build succeeded.
     0 Warning(s)
     0 Error(s)
    

Instalación de los paquetes

En el shell de comandos, instale la biblioteca cliente de certificados de Azure Key Vault para .NET:

dotnet add package Azure.Security.KeyVault.Certificates

Para este inicio rápido también deberá instalar la biblioteca cliente del SDK de Azure SDK para Azure Identity:

dotnet add package Azure.Identity

Establecimiento de variables de entorno

Esta aplicación también usa el nombre del almacén de claves como variable de entorno llamada KEY_VAULT_NAME.

Windows

set KEY_VAULT_NAME=<your-key-vault-name>

Windows PowerShell

$Env:KEY_VAULT_NAME="<your-key-vault-name>"

macOS o Linux

export KEY_VAULT_NAME=<your-key-vault-name>

Modelo de objetos

La biblioteca cliente de certificados de Azure Key Vault para .NET permite administrar los certificados. En la sección Ejemplos de código se muestra cómo crear un cliente y establecer, recuperar y eliminar un certificado.

Ejemplos de código

Adición de directivas

Agregue las directivas siguientes al principio de Program.cs:

using System;
using Azure.Identity;
using Azure.Security.KeyVault.Certificates;

Autenticación y creación de un cliente

En este inicio rápido se emplea el usuario que ha iniciado sesión para autenticarlo en el almacén de claves, que es el método preferido para el desarrollo local. Para las aplicaciones implementadas en Azure, la identidad administrada debe asignarse a App Service o la máquina virtual. Para más información, consulte Introducción a la identidad administrada.

En el siguiente ejemplo, el nombre del almacén de claves se expande al URI del almacén, con el formato "https://<nombre-del-almacén-de-claves>.vault.azure.net". En este ejemplo se usa la clase "DefaultAzureCredential()" de la biblioteca de identidades de Azure, que permite usar el mismo código en entornos diferentes con distintas opciones para proporcionar la identidad. Para más información sobre la autenticación en el almacén de claves, consulte la Guía del desarrollador.

string keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
var kvUri = "https://" + keyVaultName + ".vault.azure.net";

var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential());

Guardar certificado

En este ejemplo, para simplificar, puede usar un certificado autofirmado con la directiva de emisión predeterminada. Para esta tarea, use el método StartCreateCertificateAsync. Los parámetros del método aceptan un nombre de certificado y la directiva de certificados.

var operation = await client.StartCreateCertificateAsync("myCertificate", CertificatePolicy.Default);
var certificate = await operation.WaitForCompletionAsync();

Nota:

Si el nombre del certificado existe, el código anterior creará una versión de ese certificado.

Recuperación de un certificado

Ahora puede recuperar el certificado creado anteriormente con el método GetCertificateAsync.

var certificate = await client.GetCertificateAsync("myCertificate");

Eliminación de un certificado

Por último, vamos a eliminar y purgar el certificado desde el almacén de claves con los métodos StartDeleteCertificateAsync y PurgeDeletedCertificateAsync.

var operation = await client.StartDeleteCertificateAsync("myCertificate");

// You only need to wait for completion if you want to purge or recover the certificate.
await operation.WaitForCompletionAsync();

var certificate = operation.Value;
await client.PurgeDeletedCertificateAsync("myCertificate");

Código de ejemplo

Modifique la aplicación de consola de .NET Core para interactuar con el almacén de claves; para ello, complete los pasos siguientes:

  • Reemplace el código de Program.cs por el código siguiente:

    using System;
    using System.Threading.Tasks;
    using Azure.Identity;
    using Azure.Security.KeyVault.Certificates;
    
    namespace key_vault_console_app
    {
        class Program
        {
            static async Task Main(string[] args)
            {
                const string certificateName = "myCertificate";
                var keyVaultName = Environment.GetEnvironmentVariable("KEY_VAULT_NAME");
                var kvUri = $"https://{keyVaultName}.vault.azure.net";
    
                var client = new CertificateClient(new Uri(kvUri), new DefaultAzureCredential());
    
                Console.Write($"Creating a certificate in {keyVaultName} called '{certificateName}' ...");
                CertificateOperation operation = await client.StartCreateCertificateAsync(certificateName, CertificatePolicy.Default);
                await operation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.WriteLine($"Retrieving your certificate from {keyVaultName}.");
                var certificate = await client.GetCertificateAsync(certificateName);
                Console.WriteLine($"Your certificate version is '{certificate.Value.Properties.Version}'.");
    
                Console.Write($"Deleting your certificate from {keyVaultName} ...");
                DeleteCertificateOperation deleteOperation = await client.StartDeleteCertificateAsync(certificateName);
                // You only need to wait for completion if you want to purge or recover the certificate.
                await deleteOperation.WaitForCompletionAsync();
                Console.WriteLine(" done.");
    
                Console.Write($"Purging your certificate from {keyVaultName} ...");
                await client.PurgeDeletedCertificateAsync(certificateName);
                Console.WriteLine(" done.");
            }
        }
    }
    

Prueba y comprobación

Ejecute el siguiente comando para compilar el proyecto.

dotnet build

Aparece una variación del resultado siguiente:

Creating a certificate in mykeyvault called 'myCertificate' ... done.
Retrieving your certificate from mykeyvault.
Your certificate version is '8532359bced24e4bb2525f2d2050738a'.
Deleting your certificate from mykeyvault ... done
Purging your certificate from mykeyvault ... done

Pasos siguientes

En este inicio rápido, ha creado un almacén de claves, ha almacenado un certificado y, posteriormente, lo ha recuperado.

Para más información sobre Key Vault y cómo integrarlo con las aplicaciones, consulte los artículos siguientes: