Servidor criptográfico Utimaco

Las siguientes secciones proporcionan información sobre Utimaco CryptoServer.

Archivo de configuración

El archivo de configuración PKCS#11 de CryptoServer cs2_pkcs11.ini debe copiarse en /etc/utimaco/cs2_pkcs11.ini .

Tenga en cuenta que el módulo Utimaco PKCS11 tiene un tiempo de espera configurable (AppTimeout) que borra toda la información de la sesión si no utiliza las claves durante un tiempo. El tiempo de espera predeterminado es de 30 minutos, que suele ser demasiado corto si su CA no es muy activa. Recomendamos aumentar el tiempo de espera a, por ejemplo, 172 800 segundos (2 días), lo que permite que su CA permanezca inactiva durante un tiempo prolongado.

Abra el archivo de configuración /etc/utimaco/cs2_pkcs11.ini con un editor de texto y actualice el parámetro AppTimeout según el siguiente ejemplo:

 [Global] Timeout = 5000 Logging = 0 Logpath = /tmp [CryptoServer] Device = TCP:3001@172.16.175.128 Timeout = 600000 AppTimeout = 172800 SlotCount = 100 

Generando claves

Al utilizar un token PKCS#11, primero cree claves con el comando:

$EJBCA_HOME/dist/clientToolBox/ejbcaClientToolBox.sh PKCS11HSMKeyTool generate

Tenga en cuenta que cada CA debe tener su propia ranura, y cada ranura debe inicializarse antes de generar las claves. La inicialización incluye la configuración de un PIN de usuario para la ranura, que también requiere inicio de sesión. Las herramientas para la inicialización de la ranura deben ser proporcionadas por el proveedor del HSM; PrimeKey no las proporciona.

A continuación se muestra un ejemplo para generar claves en una ranura utilizando la contraseña usuario1:

. /p11tool Slot=1 InitToken=officer1
. /p11tool Slot=1 Label=CVCA LoginSO=officer1 InitPin=user1
$EJBCA_HOME /dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate . /libcs2_pkcs11 .so 4096 signKey 1
PKCS11 Token [SunPKCS11-libcs2_pkcs11.so-slot1] Password:
Creating certificate with entry signKey.
$EJBCA_HOME /dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate . /libcs2_pkcs11 .so 2048 defaultKey 1
PKCS11 Token [SunPKCS11-libcs2_pkcs11.so-slot1] Password:
Creating certificate with entry defaultKey.
$EJBCA_HOME /dist/clientToolBox/ejbcaClientToolBox .sh PKCS11HSMKeyTool generate . /libcs2_pkcs11 .so 512 testKey 1
PKCS11 Token [SunPKCS11-libcs2_pkcs11.so-slot1] Password:
Creating certificate with entry testKey.

Puede ver los objetos PKCS11 creados con el comando:

. /p11tool Slot=1 Login=user1 ListObjects

Este es un ejemplo de un campo de propiedad al crear la CA:

defaultKey defaultKey
certSignKey signKey
crlSignKey signKey
testKey testKey
pin user1
sharedLibrary /opt/utimaco/p11/libcs2_pkcs11 .so
slotLabelType=SLOT_NUMBER
slotLabelValue=1

Utimaco ofrece un emulador para su HSM LAN CryptoServer que puede usarse para pruebas y desarrollo. Si tiene el kit de emulación, encontrará un tutorial en doc/howto/cryptoserver-lan-emulator.txt con los pasos a seguir para usarlo con EJBCA.

Puede comprobar el estado de un dispositivo LAN CryptoServer, por ejemplo el emulador con:

. /csadm Device=TCP:3001@172.16.175.128 GetState

Importar un archivo PKCS#12 en Utimaco CryptoServer

Aunque no se recomienda, es posible importar claves desde un archivo p12 a CryptoServer. Estos pasos fueron aportados por Philipp Vogt y Helmut Edlhaimb-Rexeis. Las herramientas utilizadas son una combinación de p11tool, que se incluye con los HSM de Utimaco, y ejbcaClientToolBox.sh PKCS11HSMKeyTool .

  • Importe el archivo .p12 con p11Tool desde Utimaco (en la ranura 20 en este ejemplo). p11tool Ranura=22 AuthRSASign=GenPKIAd,:cs2: cyb:/dev/ttyS0 Login=123456 ID=TestCA2XYID ImportP12=mycert.p12,1234. Es imprescindible establecer un ID único (ID=...) al importar. El alias de la clave importada se establece en Certificado X509 (obtenido del certificado importado) y no se puede cambiar al importar.

  • Cambie el nombre del alias de clave a un alias de clave único con PKCS11HSMKeyTool rename de ejbcaClientToolbox. ejbcaClientToolBox.sh PKCS11HSMKeyTool rename /etc/utimaco/ libcs2_pkcs11.so 20 X509 Certificado TestCA2Key El nuevo alias de clave se establece en la etiqueta y el ID de CKO_CERTIFICATE y el ID de CKO_PRIVATE_KEY.

  • Opcional: elimine la clave pública con p11Tool usando Label="RSA Public Key". p11tool Slot=20 Login=123456 Label="RSA Public Key" DeleteObject

  • Pruebe las claves para asegurarse de que se puedan utilizar desde EJBCA. ejbcaClientToolBox.sh PKCS11HSMKeyTool test ./ libcs2_pkcs11.so 20 1

Asegúrese de que no haya otras claves públicas que usen esta etiqueta en el HSM. Incluso si necesita importar más de un archivo .p12, solo se puede importar y renombrar uno a la vez. Los procesos de importación y renombrado están vinculados y no pueden separarse.

Agrupamiento

El controlador PKCS#11 de Utimaco incorpora funciones de agrupación en clústeres para HSM conectados a la red. La agrupación en clústeres funciona principalmente configurando dos (o más) direcciones IP de HSM y, si hay problemas con la conexión al primer HSM, se conmuta al segundo. Un requisito previo es que el contenido del HSM sea idéntico y que las ranuras y la autenticación sean las mismas.

También puede usar la configuración del clúster para un solo HSM, lo que provoca una conmutación por error (al mismo HSM) si se produce un problema de red intermitente. Esto protege contra fallos de PKCS#11 en Java, evitando así la necesidad de reiniciar EJBCA/servidor de aplicaciones si se produce un fallo de red.

Ejemplo de configuración de clúster en el archivo de configuración de Utimaco:

[Global]
Logging = 5
Logpath = /log/TEST
Logsize = 100000000
CommandTimeout = 60000
ConnectionTimeout = 10000
KeepAlive = TRUE
[CryptoServer]
Device = {TCP: } 288 @123 123.123 .123. TCP: 288 @123 .123. 123.123
SlotCount = 100
SlotMultiSession = FALSE

En una configuración en clúster con modo de conmutación por error, todos los HSM deben contar con el material de claves necesario. Por lo tanto, los HSM deben sincronizarse antes de habilitar el modo de conmutación por error, según la siguiente secuencia de procedimientos:

  1. Utilice el modo independiente del HSM principal.

  2. Generar todas las claves en el HSM principal.

  3. Sincronización manual del HSM principal a todos los demás HSM (copia de seguridad/restauración).

  4. Habilitar el modo de conmutación por error de HSM.

Tenga en cuenta que, siempre que se realice un procedimiento de generación o renovación de claves (por ejemplo, la renovación de la clave privada de una CA), esta secuencia de acciones debe repetirse. Esto permite que un HSM independiente genere el material de claves y lo transfiera de forma segura a otros HSM durante la sincronización. Por lo tanto, vuelva al modo de operación independiente antes de la operación de generación o renovación de claves y repita los pasos 2 a 4.

Esto se debe a que, al abrir una clave (lo que incluye su creación) en PKCS#11, esta se recupera como un blob externo para poder cambiar a otro nodo en caso de conmutación por error (Store::getInternalObject). Aunque C_SetAttributeValue reabre una clave, también utiliza esta función y, por lo tanto, actúa en el blob externo y cambia el atributo solo allí, no en el HSM.