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 .
Configurar la instancia EJBCA para utilizar el servicio HSM on Demand
Utilice varios servicios DPoD desde la misma instancia EJBCA
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:
Inicie sesión en su cuenta DPoD para mostrar la página principal de Cuentas.
Para agregar un servicio, haga clic en la pestaña Servicios y luego haga clic en Agregar nuevo servicio .
Para crear un nuevo servicio para HSM on Demand , haga clic en Probar servicio para iniciar el asistente.

Revise los términos del servicio y haga clic en Siguiente .

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 .

Revisar y hacer clic en Finalizar .

Haga clic en Crear cliente de servicio para obtener el paquete de descarga del cliente, que incluye los certificados necesarios para conectarse al servicio.

Especifique el nombre del cliente de servicio y haga clic en Crear cliente de servicio .

Haga clic en Descargar cliente .

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:
Copie el archivo zip del cliente de servicio descargado a la instancia de AWS.
scp setup-my_dpod_service.zip user@ejbca-host:.Inicie sesión en la instancia con SSH.
ssh user@ejbca-hostDescomprima el archivo del cliente descargado en /opt/thales/dpodclient.
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/dpodclientsudo unzip -d /opt/thales/dpodclient/ setup-my_dpod_service.zipcd /opt/thales/dpodclient/sudo tar -xvf cvclient-min.tarNo 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.
Verifique la conectividad con el HSM:
sudo susource ./setenv./bin/64/lunacmlunacm (64-bit) v10.2.0-111. Copyright (c) 2020 SafeNet. All rights reserved.Available HSMs:Slot Id -> 3Label -> my_dpod_serviceSerial Number -> 1392941677399Model -> Cryptovisor7Firmware Version -> 7.3.0CV Firmware Version -> 1.4.0Configuration -> Luna User Partition With SO (PW) Signing With Cloning ModeSlot Description -> Net Token SlotFM HW Status -> FM Not SupportedCurrent 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 3Current Slot Id: 3 (Luna User Slot 7.3.0 (PW) Signing With Cloning Mode)Command Result : No Errorlunacm:>partition init -label my_dpod_serviceEnter password for Partition SO: W3nDwUr9TQQeZq4GRe-enter password for Partition SO: W3nDwUr9TQQeZq4GYou 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 ->proceedOption -domain was not specified. It is required.Enter the domain name: LWVjU8hqjwZBM5M4Re-enter the domain name: LWVjU8hqjwZBM5M4Command Result : No Errorlunacm:>role login -name Partition SOenter password: W3nDwUr9TQQeZq4GCommand Result : No Errorlunacm:>role init -name Crypto Officerenter new password: RmKSPD7ec8uEZYB7re-enter new password: RmKSPD7ec8uEZYB7Command Result : No Errorlunacm:>role logoutlunacm:>role login -name Crypto Officerenter password: RmKSPD7ec8uEZYB7Command Result : No Errorlunacm:>role changepw -name Crypto Officerenter existing password: RmKSPD7ec8uEZYB7enter new password: vpvTWX2pws4LkpuFre-enter new password: vpvTWX2pws4LkpuFCommand 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/dpodclientEsto 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 3Using 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 3Using 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 3Test of keystore with ID 3.PKCS11 Token [SunPKCS11-libCryptoki2.so-slot3] Password:Testing of key: secp256r1KeyPrivate part:SunPKCS11-libCryptoki2.so-slot3 EC private key, 256 bitstoken object, sensitive, unextractable)Elliptic curve key:Named curve: P-256the affine x-coordinate: c6a961d42a2250d576114b2e9093f3f53ff101319f9542fde0e3417086e56734the affine y-coordinate: 6051307ab40eb9e68fb704e0599f0d69e5b27277cbfd9b88bb71f1ed7f864eb2test Signature of key secp256r1Key: signature length 70; first byte 30; verifying trueSignings per second: 31No encryption possible with this key.Testing of key: rsa2048KeyPrivate part:SunPKCS11-libCryptoki2.so-slot3 RSA private key, 2048 bitstoken object, sensitive, unextractable)RSA key:modulus: 9f8aa059480e8097d7db4afb2448f12f8d529b99eb010f5c294c9cb838a848e1b99959e08037a96387a4ad52b1cdf9c9262a9f4e09c46c8aafa1ef08d78c830fdf0b90d102d0e131658d44df984d17b04034705fb737b7e5a9aa698b6722774e527aa350e9aac7b478b0d184f468345ad71fbd8afc18e10667f003174e0ff90034380a667ea0eae0978fa7673237451c92f62c49d445e95d29df767f4bb45abf2f1030186ac8e9d76dd8854a5257c28d1a0a58221f3df333c9599b606fd205ef46b3fdc6c95c5b72e8163bb861c7f1b4d7c76a00973ec17dd7239e09da7f902947125ef69e42f714ffcd00002e4958ea702059b7985e62c8bee7785baf345d33public exponent: 10001test Signature of key rsa2048Key: signature length 256; first byte 11; verifying trueSignings per second: 29Decryptions per second: 30O 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.
A partir de EJBCA 7.5.0 y versiones posteriores, la siguiente configuración está incluida de forma predeterminada.
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 DPoDcryptotoken.p11.lib.24.file=/opt/thales/dpodclient/libs/64/libCryptoki2.soConstruir 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:
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 .
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.

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.
Generar claves necesarias para una CA.

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:
En la interfaz de administración de EJBCA, haga clic en Autoridades de certificación en Funciones de CA.
En el campo Agregar CA , especifique un nombre de CA y haga clic en Crear .
En la página Crear CA, seleccione lo siguiente:
Token criptográfico: seleccione el nombre del token criptográfico Thales DPoD recién creado.
Algoritmo de firma: seleccione SHA256WithRSA .
EJBCA reconocerá los nombres de clave especificados en el paso Crear token criptográfico mediante la interfaz de administración y completará previamente los campos de clave.

Introduzca una validez en días, por ejemplo 365d para una validez de un año de la CA.

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,ouidSi 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=0133337fEsto 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:
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/confecho "httpserver.pubhttp= 80httpserver.pubhttps= 443httpserver.privhttps= 443httpserver.external.privhttps= 443web.reqcertindb= false#cryptotoken.p11.lib. .file=/opt/primekey/cloudhsm/lib/libliquidsec_pkcs11.so 114cryptotoken.p11.lib. .name=P11 Proxy 255cryptotoken.p11.lib. .file=/opt/primekey/p11proxy-client/p11proxy-client.so 255cryptotoken.p11.lib. 255 .canGenerateKeyMsg=ClientToolBox must be used to generate keys for this HSM provider.# Normally key generation will be allowed via the UIcryptotoken.p11.lib. .canGenerateKey= 255 true# Enable usage of Azure Key Vault Crypto Token in the Admin UIkeyvault.cryptotoken.enabled= true# Enable usage of AWS KMS Crypto Token in the Admin UIawskms.cryptotoken.enabled= trueweb.docbaseuri=disabledcryptotoken.p11.lib. .name=Thales DPoD 24cryptotoken.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.4Para verificar que los archivos estén montados, ejecute un shell en el contenedor:
sudo docker pssudo docker exec -ti thales_test /bin/bashls -al /opt/thalesInicie 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