Uso de SDK 5 de cliente para la integración con Java Keytool y Jarsigner - AWS CloudHSM

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Uso de SDK 5 de cliente para la integración con Java Keytool y Jarsigner

AWS CloudHSM el almacén de claves es un almacén de claves JCE de uso especial que utiliza los certificados asociados a las claves de su HSM a través de herramientas de terceros, como y. keytool jarsigner AWS CloudHSM no almacena los certificados en el HSM, ya que los certificados son datos públicos y no confidenciales. El almacén de AWS CloudHSM claves almacena los certificados en un archivo local y los asigna a las claves correspondientes del HSM.

Cuando se utiliza el almacén de AWS CloudHSM claves para generar nuevas claves, no se genera ninguna entrada en el archivo del almacén de claves local; las claves se crean en el HSM. Del mismo modo, cuando utiliza el almacén de claves de AWS CloudHSM para buscar claves, la búsqueda se transfiere al HSM. Al almacenar los certificados en el almacén de AWS CloudHSM claves, el proveedor comprueba que existe un par de claves con el alias correspondiente en el HSM y, a continuación, asocia el certificado proporcionado al par de claves correspondiente.

Requisitos previos

Para usar el almacén de AWS CloudHSM claves, primero debe inicializar y configurar el AWS CloudHSM SDK de JCE.

Paso 1: Instalar JCE

Para instalar el JCE, incluidos los requisitos previos del AWS CloudHSM cliente, siga los pasos para instalar la biblioteca Java.

Paso 2: Agregar credenciales de inicio de sesión de HSM a variables de entorno

Configure las variables de entorno para que contengan las credenciales de inicio de sesión de HSM.

Linux
$ export HSM_USER=<HSM user name>
$ export HSM_PASSWORD=<HSM password>
Windows
PS C:\> $Env:HSM_USER=<HSM user name>
PS C:\> $Env:HSM_PASSWORD=<HSM password>
nota

El AWS CloudHSM JCE ofrece varias opciones de inicio de sesión. Para utilizar el almacén de AWS CloudHSM claves con aplicaciones de terceros, debe utilizar el inicio de sesión implícito con variables de entorno. Si desea utilizar el inicio de sesión explícito a través del código de la aplicación, debe crear su propia aplicación con el almacén de AWS CloudHSM claves. Para obtener información adicional, consulte el artículo sobre el uso del almacén de AWS CloudHSM claves.

Paso 3: Registrar el proveedor de JCE

Para registrar el proveedor de JCE en la CloudProvider configuración de Java, siga estos pasos:

  1. Abra el archivo de configuración java.security en su instalación de Java para editarlo.

  2. En el archivo de configuración java.security, agregue com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider como último proveedor. Por ejemplo, si hay nueve proveedores en el archivo java.security, agregue el siguiente proveedor como último proveedor de la sección:

    security.provider.10=com.amazonaws.cloudhsm.jce.provider.CloudHsmProvider

nota

Añadir al AWS CloudHSM proveedor como prioridad más alta puede afectar negativamente al rendimiento del sistema, ya que se dará prioridad al AWS CloudHSM proveedor en las operaciones que puedan transferirse de forma segura al software. Como práctica recomendada, especifique siempre el proveedor que desea utilizar para una operación, ya sea el proveedor AWS CloudHSM o un proveedor basado en software.

nota

Especificar las opciones de línea de comandos -providerName, -providerclass y -providerpath al generar claves mediante keytool con el almacén de claves de AWS CloudHSM puede provocar errores.

Uso del almacén de AWS CloudHSM claves con keytool

Keytool es una conocida utilidad de línea de comandos para tareas comunes de claves y certificados. La documentación de AWS CloudHSM no ofrece un tutorial completo sobre Keytool. En este artículo se explican los parámetros específicos que debe utilizar con varias funciones de la herramienta clave cuando se utiliza AWS CloudHSM como raíz de confianza a través del almacén de AWS CloudHSM claves.

Cuando utilice keytool con el almacén de AWS CloudHSM claves, especifique los siguientes argumentos para cualquier comando de keytool:

Linux
-storetype CLOUDHSM -J-classpath< '-J/opt/cloudhsm/java/*'>
Windows
-storetype CLOUDHSM -J-classpath<'-J"C:\Program Files\Amazon\CloudHSM\java\*"'>

Si desea crear un nuevo archivo de almacén de claves mediante el almacén de AWS CloudHSM claves, consulte. Usando AWS CloudHSM KeyStore Si desea utilizar un almacén de claves existente, especifique el nombre (incluida la ruta) con el argumento keystore en keytool. Si especifica un archivo de almacén de claves que no existe en un comando de keytool, el almacén de AWS CloudHSM claves crea un nuevo archivo de almacén de claves.

Creación de nuevas claves con keytool

Puede usar keytool para generar cualquier tipo de claves RSA, AES y DESede admitidas por el SDK para JCE de AWS CloudHSM.

importante

Una clave generada mediante keytool se genera en el software y, a continuación, se importa AWS CloudHSM como una clave persistente y extraíble.

Le recomendamos encarecidamente que genere las claves no exportables fuera de keytool y que después importe los certificados correspondientes en el almacén de claves. Si utilizas claves RSA o EC extraíbles a través de keytool y Jarsigner, los proveedores exportan las claves desde AWS CloudHSM y luego las utilizan localmente para las operaciones de firma.

Si tiene varias instancias de cliente conectadas a su AWS CloudHSM clúster, tenga en cuenta que al importar un certificado al almacén de claves de una instancia de cliente, los certificados no estarán disponibles automáticamente en otras instancias de cliente. Para registrar la clave y los certificados asociados en cada instancia del cliente, debe ejecutar una aplicación Java, tal y como se describe en Generación de CSR con keytool. Si lo desea, también puede realizar los cambios necesarios en un cliente y copiar el archivo de almacén de claves resultante en las demás instancias del cliente.

Ejemplo 1: generar una clave AES-256 simétrica y guardarla en un archivo de almacén de claves llamado «my_keystore.store» del directorio de trabajo. Reemplace <secret label> por una etiqueta única.

Linux
$ keytool -genseckey -alias <secret label> -keyalg aes \ -keysize 256 -keystore my_keystore.store \ -storetype CloudHSM -J-classpath '-J/opt/cloudhsm/java/*' \
Windows
PS C:\> keytool -genseckey -alias <secret label> -keyalg aes ` -keysize 256 -keystore my_keystore.store ` -storetype CloudHSM -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Ejemplo 2: generar un par de claves RSA 2048 y guardarlo en un archivo de almacén de claves llamado “my_keystore.store” en el directorio de trabajo. Reemplace <RSA key pair label> por una etiqueta única.

Linux
$ keytool -genkeypair -alias <RSA key pair label> \ -keyalg rsa -keysize 2048 \ -sigalg sha512withrsa \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -genkeypair -alias <RSA key pair label> ` -keyalg rsa -keysize 2048 ` -sigalg sha512withrsa ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Encontrará una lista de los algoritmos de firma compatibles en la biblioteca de Java.

Eliminación de claves con keytool

El almacén de AWS CloudHSM claves no admite la eliminación de claves. Puede borrar las claves mediante el método de eliminación de la interfaz Destroyable.

((Destroyable) key).destroy();

Generación de CSR con keytool

Para tener la máxima flexibilidad al generar una solicitud de firma de certificado (CSR), utilice Motor dinámico de OpenSSL. El comando siguiente utiliza keytool para generar una CSR de un par de claves con el alias my-key-pair.

Linux
$ keytool -certreq -alias <key pair label> \ -file my_csr.csr \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -certreq -alias <key pair label> ` -file my_csr.csr ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'
nota

Para poder utilizar un par de claves de keytool, ese par de claves debe tener una entrada en el archivo de almacén de claves especificado. Si desea utilizar un par de claves generado fuera de keytool, debe importar los metadatos de las claves y los certificados en el almacén de claves. Para obtener instrucciones sobre la importación de los datos del almacén de claves, consulte Uso de keytool para importar certificados intermedios y raíz al almacén de AWS CloudHSM claves .

Uso de keytool para importar certificados intermedios y raíz al almacén de AWS CloudHSM claves

Para importar un certificado de CA, debe habilitar la verificación de una cadena de certificados completa en un certificado recién importado. A continuación, se muestra un ejemplo del comando:

Linux
$ keytool -import -trustcacerts -alias rootCAcert \ -file rootCAcert.cert -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -import -trustcacerts -alias rootCAcert ` -file rootCAcert.cert -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Si conectas varias instancias de cliente a tu AWS CloudHSM clúster, la importación de un certificado al almacén de claves de una instancia de cliente no hará que el certificado esté disponible automáticamente en otras instancias de cliente. Es necesario importar el certificado en cada instancia del cliente.

Uso de keytool para eliminar certificados del almacén de AWS CloudHSM claves

En el comando siguiente, se muestra un ejemplo de cómo se elimina un certificado de un almacén de claves de keytool para Java.

Linux
$ keytool -delete -alias mydomain \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -delete -alias mydomain ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Si conectas varias instancias de cliente a tu AWS CloudHSM clúster, al eliminar un certificado del almacén de claves de una instancia de cliente, no se eliminará automáticamente el certificado de otras instancias de cliente. Es necesario eliminar el certificado en cada instancia de cliente.

Importación de un certificado en funcionamiento al almacén de AWS CloudHSM claves mediante keytool

Cuando se firma una solicitud de firma de certificado (CSR), es posible importarla en el almacén de claves de AWS CloudHSM y asociarla con el par de claves apropiado. Puede ver un ejemplo en el siguiente comando:

Linux
$ keytool -importcert -noprompt -alias <key pair label> \ -file my_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -importcert -noprompt -alias <key pair label> ` -file my_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

El alias debe ser un par de claves con un certificado asociado del almacén de claves. Si la clave se genera fuera de keytool o en otra instancia del cliente, primero debe importar los metadatos de la clave y el certificado en el almacén de claves.

Es necesario que la cadena de certificados se pueda verificar. Si no puede verificar el certificado, es posible que deba importar el certificado de firma (entidad de certificación) en el almacén de claves para poder verificar la cadena.

Exportación de certificados mediante keytool

En el ejemplo siguiente, se genera un certificado en formato X.509 binario. Para exportar un certificado en un formato legible, añada -rfc en el comando -exportcert.

Linux
$ keytool -exportcert -alias <key pair label> \ -file my_exported_certificate.crt \ -keystore my_keystore.store \ -storetype CLOUDHSM \ -J-classpath '-J/opt/cloudhsm/java/*'
Windows
PS C:\> keytool -exportcert -alias <key pair label> ` -file my_exported_certificate.crt ` -keystore my_keystore.store ` -storetype CLOUDHSM ` -J-classpath '-J"C:\Program Files\Amazon\CloudHSM\java\*"'

Uso del almacén de AWS CloudHSM claves con Jarsigner

Jarsigner es una popular utilidad de línea de comandos para firmar archivos JAR mediante una clave almacenada de forma segura en un HSM. La documentación de AWS CloudHSM no ofrece un tutorial completo sobre Jarsigner. En esta sección, se explican los parámetros de Jarsigner que debe utilizar para firmar y verificar las firmas AWS CloudHSM como fuente de confianza en el almacén de claves. AWS CloudHSM

Configuración de claves y certificados

Para poder firmar archivos JAR con Jarsigner, no olvide configurar o completar los siguientes pasos:

  1. Siga las instrucciones de los requisitos previos del almacén de claves de AWS CloudHSM.

  2. Configure las claves de firma y los certificados y la cadena de certificados asociados, que deben almacenarse en el almacén de AWS CloudHSM claves de la instancia de servidor o cliente actual. Cree las claves AWS CloudHSM y, a continuación, importe los metadatos asociados a su almacén de AWS CloudHSM claves. Si desea utilizar keytool para configurar las claves y los certificados, consulte Creación de nuevas claves con keytool. Si utiliza varias instancias de cliente para firmar los JAR, cree la clave e importe la cadena de certificados. A continuación, copie el archivo de almacén de claves resultante en cada instancia del cliente. Si genera nuevas claves con frecuencia, es posible que le resulte más fácil importar los certificados individualmente en cada instancia del cliente.

  3. Toda la cadena de certificados debe ser verificable. Para que la cadena de certificados sea verificable, es posible que deba agregar el certificado de CA y los certificados intermedios al almacén de AWS CloudHSM claves. Consulte el fragmento de código en Firmar un archivo JAR con AWS CloudHSM y Jarsigner para obtener instrucciones acerca de cómo utilizar código Java para verificar la cadena de certificados. Si lo prefiere, puede utilizar keytool para importar los certificados. Para obtener instrucciones sobre cómo utilizar keytool, consulte Uso de keytool para importar certificados intermedios y raíz al almacén de AWS CloudHSM claves .

Firmar un archivo JAR con AWS CloudHSM y Jarsigner

Utilice el siguiente comando para firmar un archivo JAR:

Linux;

Para OpenJDK 8

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>

Para OpenJDK 11, OpenJDK 17 y OpenJDK 21

jarsigner -keystore my_keystore.store \ -signedjar signthisclass_signed.jar \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass.jar <key pair label>
Windows

Para OpenJDK8

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Para OpenJDK 11, OpenJDK 17 y OpenJDK 21

jarsigner -keystore my_keystore.store ` -signedjar signthisclass_signed.jar ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*'` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass.jar <key pair label>

Utilice el siguiente comando para verificar un JAR firmado:

Linux

Para OpenJDK8

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*:/usr/lib/jvm/java-1.8.0/lib/tools.jar' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>

Para OpenJDK 11, OpenJDK 17 y OpenJDK 21

jarsigner -verify \ -keystore my_keystore.store \ -sigalg sha512withrsa \ -storetype CloudHSM \ -J-classpath '-J/opt/cloudhsm/java/*' \ -J-Djava.library.path=/opt/cloudhsm/lib \ signthisclass_signed.jar <key pair label>
Windows

Para OpenJDK 8

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*;C:\Program Files\Java\jdk1.8.0_331\lib\tools.jar' ` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Para OpenJDK 11, OpenJDK 17 y OpenJDK 21

jarsigner -verify ` -keystore my_keystore.store ` -sigalg sha512withrsa ` -storetype CloudHSM ` -J-classpath '-JC:\Program Files\Amazon\CloudHSM\java\*` "-J-Djava.library.path='C:\Program Files\Amazon\CloudHSM\lib\'" ` signthisclass_signed.jar <key pair label>

Problemas conocidos

  1. No admitimos las claves EC con Keytool y Jarsigner.