Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Introducción a la biblioteca cliente de certificados de Azure Key Vault para Java. Siga estos pasos para instalar el paquete y probar el código de ejemplo para realizar tareas básicas.
Tip
Si trabaja con recursos de certificados de Azure Key Vault en una aplicación de Spring, se recomienda considerar Spring Cloud Azure como alternativa. Spring Cloud Azure es un proyecto de código abierto que proporciona una integración perfecta de Spring con Azure servicios. Para obtener más información sobre Spring Cloud Azure y ver un ejemplo con certificados Key Vault, consulte Enable HTTPS en Spring Boot con certificados Azure Key Vault.
Recursos adicionales:
Prerequisites
- Una suscripción Azure: crear una gratuita.
- Java Kit de desarrollo (JDK) versión 8 o posterior
- Apache Maven
- CLI de Azure
En este inicio rápido se supone que ejecuta CLI de Azure y Apache Maven en una ventana de terminal Linux.
Configuración
En este inicio rápido se usa la biblioteca Azure Identity con CLI de Azure para autenticar al usuario en Azure Services. Los desarrolladores también pueden usar Visual Studio o Visual Studio Code para autenticar sus llamadas. Para obtener más información, consulte Autenticación del cliente con la biblioteca de identidad de Azure.
Iniciar sesión en Azure
Ejecute el comando
login.az loginSi 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.
Inicie sesión con las credenciales de su cuenta en el explorador.
Creación de una nueva aplicación de consola de Java
En una ventana de consola, use el comando mvn para crear una aplicación de consola de Java con el nombre akv-certificates-java.
mvn archetype:generate -DgroupId=com.keyvault.certificates.quickstart
-DartifactId=akv-certificates-java
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4
-DinteractiveMode=false
La salida a partir de la generación del proyecto será similar a la siguiente:
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: maven-archetype-quickstart:1.4
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: packageInPathFormat, Value: com/keyvault/quickstart
[INFO] Parameter: package, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: groupId, Value: com.keyvault.certificates.quickstart
[INFO] Parameter: artifactId, Value: akv-certificates-java
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /home/user/quickstarts/akv-certificates-java
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38.124 s
[INFO] Finished at: 2019-11-15T13:19:06-08:00
[INFO] ------------------------------------------------------------------------
Cambie el directorio a la carpeta akv-certificates-java/ recién creada.
cd akv-certificates-java
Instalar el paquete
Abra el archivo pom.xml en el editor de texto. Agregue los siguientes elementos de dependencia al grupo de dependencias.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-security-keyvault-certificates</artifactId>
<version>4.8.6</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.18.2</version>
</dependency>
Creación de un grupo de recursos y de un almacén de claves
En este inicio rápido se utiliza una bóveda de claves de Azure creada previamente. Puede crear un almacén de claves siguiendo los pasos descritos en estas guías rápidas:
- CLI de Azure inicio rápido
- Azure PowerShell inicio rápido
- Inicio rápido de Azure portal
Como alternativa, puede ejecutar estos comandos CLI de Azure.
Important
Cada almacén de claves debe tener un nombre único. Reemplace <vault-name> por el nombre del almacén de claves en los ejemplos siguientes.
az group create --name "myResourceGroup" -l "EastUS"
az keyvault create --name "<vault-name>" -g "myResourceGroup" --enable-rbac-authorization true
Concesión de acceso al almacén de claves
Para obtener permisos para la bóveda de claves a través del Control de Acceso Basado en Roles (RBAC), asigne un rol a su "Nombre Principal de Usuario" (UPN) utilizando el comando de CLI de Azure az role assignment create.
az role assignment create --role "Key Vault Certificates Officer" --assignee "<upn>" --scope "/subscriptions/<subscription-id>/resourceGroups/myResourceGroup/providers/Microsoft.KeyVault/vaults/<vault-name>"
Reemplace <upn>, <subscription-id> y <vault-name> con sus valores reales. Si usó otro nombre de grupo de recursos, reemplace también "myResourceGroup". El UPN normalmente tendrá el formato de una dirección de correo electrónico (por ejemplo, username@domain.com).
Establecimiento de variables de entorno
Esta aplicación usa el nombre del almacén de claves como variable de entorno llamada KEY_VAULT_NAME.
Windows
set KEY_VAULT_NAME=<vault-name>
Windows PowerShell
$Env:KEY_VAULT_NAME="<vault-name>"
macOS o Linux
export KEY_VAULT_NAME=<vault-name>
Modelo de objetos
La biblioteca cliente de certificados de Azure Key Vault para Java permite administrar certificados. En la sección Ejemplos de código se muestra no solo cómo crear un cliente, sino también cómo crear, recuperar y eliminar un certificado.
Toda la aplicación de consola se encuentra a continuación.
Ejemplos de código
Agregar directivas
Agregue las siguientes directivas al principio del código:
import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;
Autenticación y creación de un cliente
Las solicitudes de aplicación a la mayoría de los servicios de Azure deben estar autorizadas. El uso de DefaultAzureCredential es el enfoque recomendado para implementar conexiones sin contraseña a servicios Azure en el código.
DefaultAzureCredential admite varios métodos de autenticación y determina el que se debe usar en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno.
En este inicio rápido, DefaultAzureCredential se autentica usando Azure Key Vault mediante las credenciales del usuario de desarrollo local que inició sesión en CLI de Azure. Cuando la aplicación se implementa en Azure, el mismo código de DefaultAzureCredential puede detectar y usar automáticamente una identidad administrada asignada a una instancia de App Service, máquina virtual u otros servicios. Para más información, consulte Introducción a la identidad administrada.
En este ejemplo, el nombre del almacén de claves se expande al URI del almacén de claves, en el formato https://<vault-name>.vault.azure.net. Para más información sobre la autenticación en el almacén de claves, consulte la Guía del desarrollador.
String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";
CertificateClient certificateClient = new CertificateClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
Guardar certificado
Ahora que la aplicación se ha autenticado, puede crear un certificado en el almacén de claves mediante el método certificateClient.beginCreateCertificate. Esto requiere un nombre para el certificado y una directiva de certificado: el valor "myCertificate" se asigna a la certificateName variable de este ejemplo y se usa una directiva predeterminada.
La creación de certificados es una operación de larga duración cuyo progreso puede sondear, o bien puede esperar a que se complete.
SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();
Puede obtener el certificado una vez que la creación se ha completado a través de la siguiente llamada:
KeyVaultCertificate createdCertificate = certificatePoller.getFinalResult();
Recuperación de un certificado
Ya puede recuperar el certificado que ha creado anteriormente con el método certificateClient.getCertificate.
KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);
Ya puede acceder a los detalles del certificado recuperado con operaciones como retrievedCertificate.getName, retrievedCertificate.getProperties, etc., así como su contenido retrievedCertificate.getCer.
Eliminación de un certificado
Por último, vamos a eliminar el certificado del almacén de claves con el método certificateClient.beginDeleteCertificate, que también es una operación de larga duración.
SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();
Limpieza de recursos
Cuando ya no sea necesario, puede usar el CLI de Azure o Azure PowerShell para quitar el almacén de claves y el grupo de recursos correspondiente.
az group delete -g "myResourceGroup"
Remove-AzResourceGroup -Name "myResourceGroup"
Código de ejemplo
package com.keyvault.certificates.quickstart;
import com.azure.core.util.polling.SyncPoller;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.azure.security.keyvault.certificates.CertificateClient;
import com.azure.security.keyvault.certificates.CertificateClientBuilder;
import com.azure.security.keyvault.certificates.models.CertificateOperation;
import com.azure.security.keyvault.certificates.models.CertificatePolicy;
import com.azure.security.keyvault.certificates.models.DeletedCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificate;
import com.azure.security.keyvault.certificates.models.KeyVaultCertificateWithPolicy;
public class App {
public static void main(String[] args) throws InterruptedException, IllegalArgumentException {
String keyVaultName = System.getenv("KEY_VAULT_NAME");
String keyVaultUri = "https://" + keyVaultName + ".vault.azure.net";
System.out.printf("key vault name = %s and kv uri = %s \n", keyVaultName, keyVaultUri);
CertificateClient certificateClient = new CertificateClientBuilder()
.vaultUrl(keyVaultUri)
.credential(new DefaultAzureCredentialBuilder().build())
.buildClient();
String certificateName = "myCertificate";
System.out.print("Creating a certificate in " + keyVaultName + " called '" + certificateName + " ... ");
SyncPoller<CertificateOperation, KeyVaultCertificateWithPolicy> certificatePoller =
certificateClient.beginCreateCertificate(certificateName, CertificatePolicy.getDefault());
certificatePoller.waitForCompletion();
System.out.print("done.");
System.out.println("Retrieving certificate from " + keyVaultName + ".");
KeyVaultCertificate retrievedCertificate = certificateClient.getCertificate(certificateName);
System.out.println("Your certificate's ID is '" + retrievedCertificate.getId() + "'.");
System.out.println("Deleting your certificate from " + keyVaultName + " ... ");
SyncPoller<DeletedCertificate, Void> deletionPoller = certificateClient.beginDeleteCertificate(certificateName);
deletionPoller.waitForCompletion();
System.out.print("done.");
}
}
Pasos siguientes
En este inicio rápido, no solo ha creado un almacén de claves, sino que también ha creado, recuperado y eliminado un certificado. Para obtener más información sobre Key Vault y cómo integrarla con las aplicaciones, continúe con los artículos siguientes.
- Lea un Información general de Azure Key Vault
- Consulte la guía del desarrollador Azure Key Vault
- Procedimientos para proteger el acceso a un almacén de claves
- Revisión de las mejores prácticas de seguridad específicas para certificados