Thales DPoD

Thales Data Protection on Demand (DPoD) es un servicio HSM en la nube de Thales, respaldado por un hardware similar al de Luna 7. Puede usar DPoD desde cualquier instalación de software EJBCA donde pueda agregar y configurar el cliente de Thales.

Una vez que tenga acceso a DPoD y pueda crear un servicio HSM, puede encontrar documentación sobre cómo instalarlo y configurarlo en la Documentación de servicios Thales HSM on Demand .

Crear un servicio HSM DPoD a pedido

A continuación se proporciona una breve guía sobre cómo configurar y conectarse a un servicio DPoD HSM a pedido.

Crear servicio y descargar cliente

Para crear el servicio y descargar el cliente, haga lo siguiente:

  1. Inicie sesión en su cuenta DPoD para mostrar la página principal de Cuentas.

  2. Para agregar un servicio, haga clic en la pestaña Servicios y luego haga clic en Agregar nuevo servicio .

  3. Para crear un nuevo servicio para HSM on Demand , haga clic en Probar servicio para iniciar el asistente.
    imágenes/descargar/archivos adjuntos/143726410/AddNewService.png

  4. Revise los términos del servicio y haga clic en Siguiente .
    imágenes/descargar/archivos adjuntos/143726410/AddHsmOnDemandService.png

  5. Especifique un nombre para el servicio y seleccione Eliminar restricciones FIPS para permitir el uso de algoritmos que no sean FIPS, como curvas NIST EC o Ed25519, y luego haga clic en Siguiente .
    imágenes/descargar/archivos adjuntos/143726410/ConfigureService.png

  6. Revisar y hacer clic en Finalizar .
    imágenes/descargar/archivos adjuntos/143726410/Resumen.png

  7. Haga clic en Crear cliente de servicio para obtener el paquete de descarga del cliente, que incluye los certificados necesarios para conectarse al servicio.
    imágenes/descargar/archivos adjuntos/143726410/CreateServiceClient.png

  8. Especifique el nombre del cliente de servicio y haga clic en Crear cliente de servicio .
    imágenes/descargar/archivos adjuntos/143726410/ServiceClientName.png

  9. Haga clic en Descargar cliente .
    imágenes/descargar/archivos adjuntos/143726410/DownloadClient.png

Ahora se ha creado el servicio y se ha descargado el cliente del servicio DPoD.

Configurar la instancia EJBCA para utilizar el servicio HSM on Demand

Los pasos para configurar la instancia EJBCA para utilizar el servicio HSM on Demand consisten en instalar el paquete del cliente e inicializar la partición en el servicio HSM.

Instalar el cliente HSM

A continuación se describe la instalación del cliente HSM.

Además del cliente DPoD, también es posible utilizar el cliente Luna HSM estándar. La siguiente sección describe el cliente DPoD.

Para instalar el cliente DPoD:

  1. Copie el archivo zip del cliente de servicio descargado a la instancia de AWS.

    scp setup-my_dpod_service.zip user@ejbca-host:.
  2. Inicie sesión en la instancia con SSH.

    ssh user@ejbca-host
  3. Descomprima el archivo del cliente descargado en /opt/thales/dpodclient.
    imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/advertencia.svg Puede utilizar otra ubicación, pero el controlador PKCS#11 en este directorio se detectará automáticamente en EJBCA versión 7.5.0 y posteriores.

    sudo mkdir -p /opt/thales/dpodclient
    sudo unzip -d /opt/thales/dpodclient/ setup-my_dpod_service.zip
    cd /opt/thales/dpodclient/
    sudo tar -xvf cvclient-min.tar

    No es necesario ser root para ejecutar el cliente Luna, pero instalar el controlador como root impide que otros usuarios del sistema operativo modifiquen los archivos. Sin embargo, debe poder crear archivos temporales donde ejecute el comando source ./setenv a continuación.

  4. Verifique la conectividad con el HSM:

    sudo su
    source ./setenv
    ./bin/64/lunacm
    lunacm (64-bit) v10.2.0-111. Copyright (c) 2020 SafeNet. All rights reserved.
    Available HSMs:
    Slot Id -> 3
    Label -> my_dpod_service
    Serial Number -> 1392941677399
    Model -> Cryptovisor7
    Firmware Version -> 7.3.0
    CV Firmware Version -> 1.4.0
    Configuration -> Luna User Partition With SO (PW) Signing With Cloning Mode
    Slot Description -> Net Token Slot
    FM HW Status -> FM Not Supported
    Current Slot Id: 3

Inicializar partición

Antes de utilizar el HSM, debe inicializar la partición para crear las credenciales de acceso que luego se utilizarán para acceder al HSM desde EJBCA.

La ranura utilizada en el siguiente ejemplo es la número 3, que es el número mostrado anteriormente al ejecutar el comando lunacm . Use el número de ranura de su HSM. Para usar la partición, necesita crear un Oficial de Seguridad y un Oficial de Criptografía. El Oficial de Criptografía es el usuario del HSM que puede crear objetos y usarlos, es decir, un Usuario de Lectura/Escritura. Luna también define un Usuario de Criptografía, que es de solo lectura. Esto no suele usarse en EJBCA, ya que no permite generar claves, por lo que no se crea ningún Usuario de Criptografía en el siguiente ejemplo.

No reutilice las contraseñas aleatorias a continuación, cree sus propias contraseñas aleatorias.

Aunque no parezca un secreto, el dominio también lo es, por lo que deberías usar tu propio valor aleatorio para el nombre de dominio . Según la documentación de Thales :

"El dominio de seguridad, o dominio de clonación, es un secreto de propósito especial que se adjunta a una partición en un HSM".

Asegúrese de almacenar sus secretos de forma segura (la mejor práctica en producción es bajo el control de varias personas). Si olvida los secretos, podría tener que eliminar el servicio por completo y perder todas sus claves.

Para inicializar la partición para crear las credenciales de acceso:

lunacm:>slot set -slot 3
Current Slot Id: 3 (Luna User Slot 7.3.0 (PW) Signing With Cloning Mode)
Command Result : No Error
lunacm:>partition init -label my_dpod_service
Enter password for Partition SO: W3nDwUr9TQQeZq4G
Re-enter password for Partition SO: W3nDwUr9TQQeZq4G
You are about to initialize the partition.
All contents of the partition will be destroyed.
Are you sure you wish to continue?
Type 'proceed' to continue, or 'quit' to quit now ->proceed
Option -domain was not specified. It is required.
Enter the domain name: LWVjU8hqjwZBM5M4
Re-enter the domain name: LWVjU8hqjwZBM5M4
Command Result : No Error
lunacm:>role login -name Partition SO
enter password: W3nDwUr9TQQeZq4G
Command Result : No Error
lunacm:>role init -name Crypto Officer
enter new password: RmKSPD7ec8uEZYB7
re-enter new password: RmKSPD7ec8uEZYB7
Command Result : No Error
lunacm:>role logout
lunacm:>role login -name Crypto Officer
enter password: RmKSPD7ec8uEZYB7
Command Result : No Error
lunacm:>role changepw -name Crypto Officer
enter existing password: RmKSPD7ec8uEZYB7
enter new password: vpvTWX2pws4LkpuF
re-enter new password: vpvTWX2pws4LkpuF
Command Result : No Error

No es necesario agregar un usuario de criptografía, ya que el oficial de criptografía se utiliza para generar claves en la ranura.

Ruta del cliente de exportación

Al utilizar el cliente DPoD en una máquina, debe exportar una configuración para señalar dónde está instalado el cliente DPoD.

export ChrystokiConfigurationPath=/opt/thales/dpodclient

Esto debe ejecutarse antes de poder ejecutar cualquiera de los comandos CLI a continuación, o recibirá mensajes de error que indicarán que no se puede localizar al cliente.

Reiniciar EJBCA

Como ha agregado un nuevo proveedor PKCS#11 y ha configurado una nueva variable de entorno, es necesario reiniciar EJBCA para encontrar el nuevo proveedor.

Generar claves

Puede generar claves mediante la interfaz de usuario o la CLI. Usar la CLI es una forma rápida de probar la funcionalidad del HSM.

A continuación se muestra un ejemplo para generar claves, una RSA y una ECDSA, en una ranura usando la contraseña del Crypto Officer mencionado anteriormente.

$ . /ejbcaClientToolBox .sh PKCS11HSMKeyTool generate /opt/thales/dpodclient/libs/64/libCryptoki2 .so 2048 rsa2048Key 3
Using Slot Reference Type: Slot Number.
PKCS11 Token [SunPKCS11-libCryptoki2.so-slot3] Password:
2020-11-24 11:10:29,535 INFO [org.cesecore.keys.util.SignWithWorkingAlgorithm] Signature algorithm 'SHA256WithRSA' working for provider 'SunPKCS11-libCryptoki2.so-slot3 version 1.8' .
Created certificate with entry rsa2048Key.
$ . /ejbcaClientToolBox .sh PKCS11HSMKeyTool generate /opt/thales/dpodclient/libs/64/libCryptoki2 .so secp256r1 secp256r1Key 3
Using Slot Reference Type: Slot Number.
PKCS11 Token [SunPKCS11-libCryptoki2.so-slot3] Password:
2020-11-24 11:15:24,722 INFO [org.cesecore.keys.util.SignWithWorkingAlgorithm] Signature algorithm 'SHA224withECDSA' working for provider 'SunPKCS11-libCryptoki2.so-slot3 version 1.8' .
Created certificate with entry secp256r1Key.

Si usa P11-NG, también puede usar esta CLI. Tenga en cuenta que solo debe usarla si también usa P11-NG desde su instancia EJBCA.

./p11ng-cli.sh generatekeypair --lib-file /opt/thales/dpodclient/libs/ 64 /libCryptoki2.so --slot-ref SLOT_NUMBER --slot 3 --alias ed25519_1 --key-spec Ed25519

Lista y claves de prueba utilizadas por EJBCA

A continuación se muestra un ejemplo de listado y prueba de todas las claves que EJBCA podría usar:

$ . /ejbcaClientToolBox .sh PKCS11HSMKeyTool test herramienta clave PKCS11HSM /opt/thales/dpodclient/libs/64/libCryptoki2 .so 3
Test of keystore with ID 3.
PKCS11 Token [SunPKCS11-libCryptoki2.so-slot3] Password:
Testing of key: secp256r1Key
Private part:
SunPKCS11-libCryptoki2.so-slot3 EC private key, 256 bitstoken object, sensitive, unextractable)
Elliptic curve key:
Named curve: P-256
the affine x-coordinate: c6a961d42a2250d576114b2e9093f3f53ff101319f9542fde0e3417086e56734
the affine y-coordinate: 6051307ab40eb9e68fb704e0599f0d69e5b27277cbfd9b88bb71f1ed7f864eb2
test Signature of key secp256r1Key: signature length 70; first byte 30; verifying true
Signings per second: 31
No encryption possible with this key.
Testing of key: rsa2048Key
Private part:
SunPKCS11-libCryptoki2.so-slot3 RSA private key, 2048 bitstoken object, sensitive, unextractable)
RSA key:
modulus: 9f8aa059480e8097d7db4afb2448f12f8d529b99eb010f5c294c9cb838a848e1b99959e08037a96387a4ad52b1cdf9c9262a9f4e09c46c8aafa1ef08d78c830fdf0b90d102d0e131658d44df984d17b04034705fb737b7e5a9aa698b6722774e527aa350e9aac7b478b0d184f468345ad71fbd8afc18e10667f003174e0ff90034380a667ea0eae0978fa7673237451c92f62c49d445e95d29df767f4bb45abf2f1030186ac8e9d76dd8854a5257c28d1a0a58221f3df333c9599b606fd205ef46b3fdc6c95c5b72e8163bb861c7f1b4d7c76a00973ec17dd7239e09da7f902947125ef69e42f714ffcd00002e4958ea702059b7985e62c8bee7785baf345d33
public exponent: 10001
test Signature of key rsa2048Key: signature length 256; first byte 11; verifying true
Signings per second: 29
Decryptions per second: 30

O con P11-NG:

./p11ng-cli.sh listobjects --lib-file /opt/thales/dpodclient/libs/ 64 /libCryptoki2.so --slot-ref SLOT_NUMBER --slot 3
./p11ng-cli.sh signperformancetest --lib-file /opt/thales/dpodclient/libs/ 64 /libCryptoki2.so --slot-ref SLOT_NUMBER --slot 3 --alias ed25519_1 --sign-algorithm Ed25519

Crear token criptográfico y CA en EJBCA

Para crear un token criptográfico PKCS11 con el HSM DPoD, primero asegúrese de que EJBCA conozca la ubicación de la biblioteca del controlador PKCS#11.

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/error.svg A partir de EJBCA 7.5.0 y versiones posteriores, la siguiente configuración está incluida de forma predeterminada.

  1. Haga referencia al archivo de biblioteca PKCS#11 en conf/web.properties en EJBCA, agregando las siguientes dos líneas (busque una buena ubicación después de la biblioteca n.° 23):

    cryptotoken.p11.lib.24.name=Thales DPoD
    cryptotoken.p11.lib.24.file=/opt/thales/dpodclient/libs/64/libCryptoki2.so
  2. Construir y volver a implementar EJBCA:

    ant clean deployear

Después de iniciar EJBCA, puede generar un nuevo token criptográfico PKCS#11 utilizando la biblioteca DPoD de Thales, ya sea mediante la interfaz de administración de EJBCA o la CLI de EJBCA.

Crear un token criptográfico mediante la interfaz de administración

Para crear un token criptográfico PKCS#11 mediante la interfaz de administración:

  1. En la interfaz de administración de EJBCA, haga clic en Tokens criptográficos en Funciones de CA y, a continuación, haga clic en Crear nuevo .

  2. Ingrese lo siguiente en la página Nuevo token criptográfico:

    • Tipo: PKCS#11

    • PKCS#11: Biblioteca : Thales DPoD

    • PKCS#11: Tipo de referencia : Etiqueta de ranura/token

      Tenga en cuenta que es posible que tenga que esperar unos segundos para que aparezca la etiqueta del token, ya que las etiquetas se leen desde el HSM remoto.

      Asegúrese de que la variable de entorno ChrystokiConfigurationPath definida anteriormente esté configurada para JBoss/WildFly para que el proceso pueda usar la conexión PKCS#11 al servicio DPoD.

      imágenes/descargar/archivos adjuntos/143726410/a1.png

  3. Ingrese la contraseña de Crypto Officer como Código de autenticación y haga clic en Guardar .
    Ahora debería obtener una lista de claves (que no hay ninguna en una nueva ranura) y una posibilidad de generar nuevos pares de claves.
    imágenes/descargar/archivos adjuntos/143726410/a2.png

  4. Generar claves necesarias para una CA.
    imágenes/descargar/archivos adjuntos/143726410/a3.png

Con el token criptográfico creado, ahora puede continuar y crear CA, utilizando claves en el HSM DPoD.

Crear CA mediante la interfaz de administración de EJBCA

Para crear una CA mediante la interfaz web:


  1. En la interfaz de administración de EJBCA, haga clic en Autoridades de certificación en Funciones de CA.

  2. En el campo Agregar CA , especifique un nombre de CA y haga clic en Crear .

  3. En la página Crear CA, seleccione lo siguiente:

  4. Introduzca una validez en días, por ejemplo 365d para una validez de un año de la CA.
    imágenes/descargar/archivos adjuntos/143726410/a5.png

  5. Desplácese hasta la parte inferior de la página y haga clic en Crear .


Esto completa el proceso de creación de una autoridad de certificación utilizando EJBCA en AWS, con claves de una partición DPoD Cloud HSM.

Crear un token criptográfico mediante CLI

Opcionalmente, puede crear tokens criptográficos mediante la CLI de EJBCA. Para crear el mismo token criptográfico que el anterior, ejecute lo siguiente:

bin/ejbca.sh cryptotoken create --token "Thales DPoD Tomas Test2" --pin null --type PKCS11CryptoToken --lib /opt/thales/dpodclient/libs/ 64 /libCryptoki2.so --slotlabeltype SLOT_LABEL --slotlabel "tomas_ejbca_test_1" --autoactivate false

Utilice varios servicios DPoD desde la misma instancia EJBCA

Actualmente no es posible usar varios Servicios DPoD (HSM) desde una misma instancia de EJBCA. Debido a la variable de entorno requerida ChrystokiConfigurationPath, un proceso solo puede usar un Servicio DPoD.

Comandos útiles de Luna

A continuación se enumeran comandos nativos útiles de Luna cmu.

Para enumerar objetos y sus identificadores (ouid):

bin /64/cmu list -display=index,class,keyType,label,ouid

Si ha creado claves con comandos nativos o claves importadas, probablemente no exista ningún objeto de certificado, como lo requiere el proveedor PKCS#11 de Java. Para crear un certificado autofirmado que haga referencia al identificador privado, ejecute:

bin /64/cmu selfSigncertificate - id =0 -CN= "caSign00001" -startDate=20020101 -endDate=20451231 -serialNum=0133337f

Esto enumerará y preguntará qué ouid utilizar.

Cómo agregar controladores DPoD a un contenedor

Hay varias maneras de agregar controladores HSM a los contenedores. Puedes agregar una capa de sistema de archivos con docker-compose, como se describe en el GitHub de Keyfactor , o puedes montar los archivos necesarios como se describe aquí.

En versiones de EJBCA anteriores a la 7.5.0, es necesario configurar EJBCA para encontrar el controlador. En el host donde se ejecutará Docker, cree un archivo web.properties actualizado con la entrada de controlador adicional (n.º 24) según lo siguiente:

imágenes/s/-2y7bau/8703/189cb2l/_/imagenes/iconos/emoticonos/error.svg A partir de EJBCA 7.5.0 y versiones posteriores, la siguiente configuración en web.properties no debe configurarse.

sudo mkdir -p /opt/primekey/ejbca/conf
echo "httpserver.pubhttp= 80
httpserver.pubhttps= 443
httpserver.privhttps= 443
httpserver.external.privhttps= 443
web.reqcertindb= false
#cryptotoken.p11.lib. .file=/opt/primekey/cloudhsm/lib/libliquidsec_pkcs11.so 114
cryptotoken.p11.lib. .name=P11 Proxy 255
cryptotoken.p11.lib. .file=/opt/primekey/p11proxy-client/p11proxy-client.so 255
cryptotoken.p11.lib. 255 .canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.
# Normally key generation will be allowed via the UI
cryptotoken.p11.lib. .canGenerateKey= 255 true
# Enable usage of Azure Key Vault Crypto Token in the Admin UI
keyvault.cryptotoken.enabled= true
# Enable usage of AWS KMS Crypto Token in the Admin UI
awskms.cryptotoken.enabled= true
web.docbaseuri=disabled
cryptotoken.p11.lib. .name=Thales DPoD 24
cryptotoken.p11.lib. .file=/opt/thales/dpodclient/libs/ 24 64 /libCryptoki2.so
" | sudo tee -a " /opt/primekey/ejbca/conf/web.properties"

Iniciando el contenedor

Suponiendo que tiene los controladores funcionando en /opt/thales/dpodclient como se describe arriba, puede simplemente iniciar un contenedor montando la configuración modificada y el cliente DPoD en el sistema de archivos del contenedor, como apuntando la variable de entorno hacia él.

sudo docker run -it --rm --name thales_test -p - 80 : 8080 -p 443 : 8443 . -v /opt/primekey/ejbca/conf/web.properties:/etc/ejbca/conf/web.properties -v /opt/thales:/opt/thales -e ChrystokiConfigurationPath=/opt/thales/dpodclient registry.primekey.se/primekey/ejbca-ee: 3 5 7.4

Para verificar que los archivos estén montados, ejecute un shell en el contenedor:

sudo docker ps
sudo docker exec -ti thales_test /bin/bash
ls -al /opt/thales

Inicie sesión en la interfaz de administración de EJBCA en la instancia del contenedor para crear un token criptográfico DPoD y usarlo.

Puede inscribirse para obtener la clave con la URL: https://localhost/ejbca/enrol/keystore.jsp

Y después de instalar superadmin.p12, acceda a la interfaz de administración en: https://localhost/ejbca/adminweb