Biblioteca cliente de certificados de Azure Key Vault para .NET, versión 4.5.1
Azure Key Vault es un servicio en la nube que proporciona almacenamiento seguro y administración automatizada de certificados usados en una aplicación en la nube. Se pueden conservar varios certificados y varias versiones del mismo certificado en azure Key Vault. Cada certificado del almacén tiene una directiva asociada que controla la emisión y duración del certificado, junto con las acciones que se deben realizar a medida que los certificados están a punto de expirar.
La biblioteca cliente de certificados de Azure Key Vault permite administrar certificados mediante programación, ofrecer métodos para crear, actualizar, enumerar y eliminar certificados, directivas, emisores y contactos. La biblioteca también admite la administración de operaciones de certificados pendientes y la administración de certificados eliminados.
Código | fuente Paquete (NuGet) | Documentación | de referencia de API | Documentación del productoMuestras | Guía de migración
Introducción
Instalar el paquete
Instale la biblioteca cliente de certificados de Azure Key Vault para .NET con NuGet:
dotnet add package Azure.Security.KeyVault.Certificates
Prerrequisitos
- Una suscripción de Azure.
- Una Key Vault de Azure existente. Si necesita crear una Key Vault de Azure, puede usar Azure Portal o la CLI de Azure.
- Autorización a una instancia de Azure Key Vault existente mediante RBAC (recomendado) o control de acceso.
Si usa la CLI de Azure, reemplace <your-resource-group-name>
y <your-key-vault-name>
por sus propios nombres únicos:
az keyvault create --resource-group <your-resource-group-name> --name <your-key-vault-name>
Autenticar el cliente
Para interactuar con el servicio azure Key Vault, deberá crear una instancia de la clase CertificateClient. Necesita una dirección URL del almacén, que puede ver como "Nombre DNS" en el portal y credenciales para crear instancias de un objeto de cliente.
Los ejemplos que se muestran a continuación usan , DefaultAzureCredential
que es adecuado para la mayoría de los escenarios, incluidos los entornos de desarrollo y producción locales.
Además, se recomienda usar una identidad administrada para la autenticación en entornos de producción.
Puede encontrar más información sobre las distintas formas de autenticación y sus tipos de credenciales correspondientes en la documentación de Azure Identity .
Para usar el DefaultAzureCredential
proveedor que se muestra a continuación u otros proveedores de credenciales proporcionados con el SDK de Azure, primero debe instalar el paquete Azure.Identity:
dotnet add package Azure.Identity
Creación de CertificateClient
Cree una instancia de para DefaultAzureCredential
pasar al cliente.
La misma instancia de una credencial de token se puede usar con varios clientes si se autenticarán con la misma identidad.
// Create a new certificate client using the default credential from Azure.Identity using environment variables previously set,
// including AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, and AZURE_TENANT_ID.
var client = new CertificateClient(vaultUri: new Uri(vaultUrl), credential: new DefaultAzureCredential());
Conceptos clave
KeyVaultCertificate
Un KeyVaultCertificate
es el recurso fundamental dentro de Azure Key Vault. Usará certificados para cifrar y comprobar los datos cifrados o firmados.
CertificateClient
Con un CertificateClient
puede obtener certificados del almacén, crear nuevos certificados y nuevas versiones de certificados existentes, actualizar metadatos de certificado y eliminar certificados. También puede administrar emisores de certificados, contactos y directivas de administración de certificados. Esto se muestra en los ejemplos siguientes.
Seguridad para subprocesos
Garantizamos que todos los métodos de instancia de cliente son seguros para subprocesos e independientes entre sí (instrucciones). Esto garantiza que la recomendación de reutilizar instancias de cliente siempre es segura, incluso entre subprocesos.
Conceptos adicionales
Opciones | de cliente Acceso a la respuesta | Operaciones | de larga duraciónControl de errores | Diagnóstico | Burla | Duración del cliente
Ejemplos
El paquete Azure.Security.KeyVault.Certificates admite API sincrónicas y asincrónicas.
En la siguiente sección se proporcionan varios fragmentos de código con el client
creado anteriormente, que abarcan algunas de las tareas relacionadas con el servicio de certificados de Azure Key Vault más comunes:
Ejemplos de sincronización
- Crear un certificado
- Recuperación de un certificado
- Actualización de un certificado existente
- Enumeración de certificados
- Eliminar un certificado
Ejemplos asincrónicos
- Creación de un certificado de forma asincrónica
- Enumerar certificados de forma asincrónica
- Eliminar un certificado de forma asincrónica
Crear un certificado
StartCreateCertificate
crea un certificado que se va a almacenar en azure Key Vault. Si ya existe un certificado con el mismo nombre, se crea una nueva versión del certificado.
Al crear el certificado, el usuario puede especificar la directiva que controla la duración del certificado. Si no se especifica ninguna directiva, se usará la directiva predeterminada. La StartCreateCertificate
operación devuelve un CertificateOperation
. En el ejemplo siguiente se crea un certificado autofirmado con la directiva predeterminada.
// Create a certificate. This starts a long running operation to create and sign the certificate.
CertificateOperation operation = client.StartCreateCertificate("MyCertificate", CertificatePolicy.Default);
// You can await the completion of the create certificate operation.
// You should run UpdateStatus in another thread or do other work like pumping messages between calls.
while (!operation.HasCompleted)
{
Thread.Sleep(2000);
operation.UpdateStatus();
}
KeyVaultCertificateWithPolicy certificate = operation.Value;
NOTA: En función de los métodos de validación y emisor de certificados, la creación y la firma de certificados pueden tardar una cantidad de tiempo indeterminada. Los usuarios solo deben esperar a las operaciones de certificado cuando la operación se pueda completar razonablemente en el ámbito de la aplicación, como con certificados autofirmados o emisores con tiempos de respuesta conocidos.
Recuperación de un certificado
GetCertificate
recupera la versión más reciente de un certificado almacenado en azure Key Vault junto con su CertificatePolicy
.
KeyVaultCertificateWithPolicy certificateWithPolicy = client.GetCertificate("MyCertificate");
GetCertificateVersion
recupera una versión específica de un certificado en el almacén.
KeyVaultCertificate certificate = client.GetCertificateVersion(certificateWithPolicy.Name, certificateWithPolicy.Properties.Version);
Actualización de un certificado existente
UpdateCertificate
actualiza un certificado almacenado en azure Key Vault.
CertificateProperties certificateProperties = new CertificateProperties(certificate.Id);
certificateProperties.Tags["key1"] = "value1";
KeyVaultCertificate updated = client.UpdateCertificateProperties(certificateProperties);
Enumeración de certificados
GetCertificates
enumera los certificados en el almacén y devuelve las propiedades de selección del certificado. No se devolverán campos confidenciales del certificado. Esta operación requiere el permiso certificates/list.
Pageable<CertificateProperties> allCertificates = client.GetPropertiesOfCertificates();
foreach (CertificateProperties certificateProperties in allCertificates)
{
Console.WriteLine(certificateProperties.Name);
}
Eliminación de un certificado
DeleteCertificate
elimina todas las versiones de un certificado almacenado en azure Key Vault. Cuando la eliminación temporal no está habilitada para azure Key Vault, esta operación elimina permanentemente el certificado. Si la eliminación temporal está habilitada, el certificado se marca para su eliminación y se puede purgar o recuperar opcionalmente hasta su fecha de purga programada.
DeleteCertificateOperation operation = client.StartDeleteCertificate("MyCertificate");
// You only need to wait for completion if you want to purge or recover the certificate.
// You should call `UpdateStatus` in another thread or after doing additional work like pumping messages.
while (!operation.HasCompleted)
{
Thread.Sleep(2000);
operation.UpdateStatus();
}
DeletedCertificate certificate = operation.Value;
client.PurgeDeletedCertificate(certificate.Name);
Creación de un certificado de forma asincrónica
Las API asincrónicas son idénticas a sus homólogos sincrónicos, pero devuelven con el sufijo "asincrónico" típico para los métodos asincrónicos y devuelven .Task
En este ejemplo se crea un certificado en azure Key Vault con los argumentos opcionales especificados.
// Create a certificate. This starts a long running operation to create and sign the certificate.
CertificateOperation operation = await client.StartCreateCertificateAsync("MyCertificate", CertificatePolicy.Default);
// You can await the completion of the create certificate operation.
KeyVaultCertificateWithPolicy certificate = await operation.WaitForCompletionAsync();
Enumerar certificados de forma asincrónica
Enumerar el certificado no se basa en esperar el GetPropertiesOfCertificatesAsync
método, pero devuelve un AsyncPageable<CertificateProperties>
valor que se puede usar con la await foreach
instrucción :
AsyncPageable<CertificateProperties> allCertificates = client.GetPropertiesOfCertificatesAsync();
await foreach (CertificateProperties certificateProperties in allCertificates)
{
Console.WriteLine(certificateProperties.Name);
}
Eliminar un certificado de forma asincrónica
Al eliminar un certificado de forma asincrónica antes de purgarlo, puede esperar al WaitForCompletionAsync
método en la operación.
De forma predeterminada, este bucle se realiza indefinidamente, pero puede cancelarlo pasando un CancellationToken
.
DeleteCertificateOperation operation = await client.StartDeleteCertificateAsync("MyCertificate");
// You only need to wait for completion if you want to purge or recover the certificate.
await operation.WaitForCompletionAsync();
DeletedCertificate certificate = operation.Value;
await client.PurgeDeletedCertificateAsync(certificate.Name);
Solución de problemas
Consulte nuestra guía de solución de problemas para obtener más información sobre cómo diagnosticar varios escenarios de error.
General
Al interactuar con la biblioteca cliente de certificados de Azure Key Vault mediante el SDK de .NET, los errores devueltos por el servicio corresponden a los mismos códigos de estado HTTP devueltos para las solicitudes de la API REST.
Por ejemplo, si intenta recuperar una clave que no existe en la Key Vault de Azure, se devuelve un 404
error que indica Not Found
.
try
{
KeyVaultCertificateWithPolicy certificateWithPolicy = client.GetCertificate("SomeCertificate");
}
catch (RequestFailedException ex)
{
Console.WriteLine(ex.ToString());
}
Observará que se registra información adicional, como el identificador de solicitud de cliente de la operación.
Message:
Azure.RequestFailedException : Service request failed.
Status: 404 (Not Found)
Content:
{"error":{"code":"CertificateNotFound","message":"Certificate not found: MyCertificate"}}
Headers:
Cache-Control: no-cache
Pragma: no-cache
Server: Microsoft-IIS/10.0
x-ms-keyvault-region: westus
x-ms-request-id: 625f870e-10ea-41e5-8380-282e5cf768f2
x-ms-keyvault-service-version: 1.1.0.866
x-ms-keyvault-network-info: addr=131.107.174.199;act_addr_fam=InterNetwork;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Strict-Transport-Security: max-age=31536000;includeSubDomains
X-Content-Type-Options: nosniff
Date: Tue, 18 Jun 2019 16:02:11 GMT
Content-Length: 75
Content-Type: application/json; charset=utf-8
Expires: -1
Pasos siguientes
Hay varios ejemplos de biblioteca cliente de certificados de Azure Key Vault disponibles en este repositorio de GitHub. Estos ejemplos proporcionan código de ejemplo para escenarios adicionales que se suelen encontrar al trabajar con Azure Key Vault:
Sample1_HelloWorld.md: para trabajar con certificados de Azure Key Vault, entre los que se incluyen:
- Crear un certificado
- Obtención de un certificado existente
- Actualización de un certificado existente
- Eliminación de un certificado
Sample2_GetCertificates.md: código de ejemplo para trabajar con certificados de Azure Key Vault, entre los que se incluyen:
- Creación de certificados
- Enumerar todos los certificados del Key Vault
- Enumeración de versiones de un certificado especificado
- Eliminación de certificados de la Key Vault
- Enumeración de certificados eliminados en el Key Vault
Documentación adicional
- Para obtener documentación más amplia sobre Azure Key Vault, consulte la documentación de referencia de API.
- Para la biblioteca cliente de secretos, consulte Biblioteca cliente de secretos.
- Para la biblioteca cliente de claves, consulte Biblioteca cliente de claves.
Contribuir
Consulte la CONTRIBUTING.md para obtener más información sobre la compilación, las pruebas y la contribución a estas bibliotecas.
Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para más detalles, visite https://cla.microsoft.com.
Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.
Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.
Azure SDK for .NET