Recuperación de claves
La recuperación de claves permite reutilizar o restaurar la clave privada de un usuario. Esto implica que las claves generadas por el servidor (y el certificado) de un usuario se almacenan cifradas en la base de datos de la CA. El objetivo es recuperar una clave de cifrado si el usuario la pierde. Sin la posibilidad de recuperar la clave, los datos cifrados se perderán para siempre si se pierde la clave. La recuperación de claves solo debe utilizarse para claves de cifrado, no para claves de autenticación o firma, donde no sea necesaria.
Para habilitar la recuperación de clave mediante la interfaz de usuario de CA:
Establezca Habilitar recuperación de clave en Configuración del sistema .
Cree un nuevo perfil de entidad final y seleccione usarlo para clave recuperable.
Agregue usuarios con este perfil de entidad final. Use un tipo de almacén de claves distinto de Generado por el usuario , por ejemplo, P12, y seleccione Clave recuperable .
Inscriba al usuario con la función "Crear almacén de claves" en RA Web. La CA genera un par de claves privadas y públicas, que se cifran y almacenan en la base de datos de la CA (tabla KeyRecoveryData).
Si la opción "Reutilizar certificado antiguo" en el perfil de la entidad final no está marcada (predeterminado), se crea un nuevo certificado para la entidad final utilizando la clave privada recuperada y se devuelve al almacén de claves. Si la opción "Reutilizar certificado antiguo" está marcada, el certificado antiguo (posiblemente caducado) se devolverá al almacén de claves.
Tenga en cuenta que la recuperación de clave no se puede utilizar con claves "generadas por el usuario" ya que la CA no tiene acceso a la clave privada en este caso y, por lo tanto, no puede almacenarla.
Claves de cifrado
Las claves archivadas se almacenan como un PKCS#12 protegido con contraseña y se cifran además mediante una clave simétrica AES256 efímera, que a su vez se cifra utilizando la clave de cifrado designada por la CA.

Para el cifrado, solo se admiten las suites RSA y ECCDH (cofactor de curva elíptica Diffie Hellman). En el caso de ECCDH, solo se pueden usar cifrados con un cofactor de 1, lo que limita las opciones de curva a las siguientes: P-224, P-256, P384, P-521, K-233, K-283, K-409, K-571, B-233, B-283, B-409 y B-571. Consulte el borrador de internet del NIST sobre los valores JSON de las capacidades de los componentes ECC CDH .
Por razones arquitectónicas, cuando se utiliza el archivo de claves, el cifrado de la clave de entidad final debe coincidir con el de las claves de firma y cifrado; en otras palabras, solo las claves de entidad final EC pueden ser archivadas por una CA EC (aunque pueden tener curvas diferentes), y solo las claves de entidad final RSA pueden ser archivadas por una CA RSA.
Generar nuevo certificado
El siguiente es un ejemplo de una secuencia de comandos utilizados para generar un nuevo certificado para un usuario que utiliza el mismo par de claves, si la clave y el certificado se generaron con una clave recuperable como se describe anteriormente:
Marcar el certificado generado para recuperación de clave:
bin /ejbca .sh ra keyrecovernewest <username>Establezca una contraseña de texto sin cifrar para la sesión por lotes que se utilizará:
bin /ejbca .sh ra setclearpwd <username> <userpass>Reemitir el certificado:
bin /ejbca .sh batch <username>También puede generar un nuevo certificado utilizando la GUI de RA en su navegador.
Usando la interfaz de usuario de RA:
Interfaz de usuario de RA → Buscar > Certificados → Ver (para un certificado específico).
RA UI → Recuperar clave → Ingresar nuevo código de inscripción → Confirmar solicitud.
RA UI → Inscribirse → Usar nombre de usuario → Ingresar nombre de usuario y contraseña → Obtener P12 / JKS / PEM.
Opcionalmente, se puede utilizar Inscribir → Solicitar ID si la operación requiere aprobación.
Usando la API de WS:
Recuperación de claves
editarUsuario
pkcs12Req
o combinándolo en un solo comando:
Recuperación de claves Inscripción
Contraseñas generadas automáticamente
Puede utilizar contraseñas generadas automáticamente para entidades finales, de modo que al inscribirse para obtener un nuevo certificado/almacén de claves y recuperar un almacén de claves antiguo, se le envíe al usuario una contraseña generada automáticamente por correo electrónico.
Para habilitar contraseñas generadas automáticamente:
Habilite la opción Generado automáticamente en Editar perfil de entidad final → Contraseña (o Código de inscripción) → Generado automáticamente .
Agregue una notificación para STATUSNEW y STATUSKEYRECOVERY en Editar perfil de entidad final → Notificaciones → Eventos de notificación .
Tenga en cuenta que debe asegurarse de que las notificaciones por correo electrónico funcionen para poder utilizar la función de contraseñas generadas automáticamente.
Generación de clave local
En sistemas con RA distribuidas que utilizan recuperación de claves, podría ser conveniente almacenar los pares de claves utilizados para la recuperación en una base de datos perteneciente a una instancia distinta a la de la CA. Con la generación local de claves, las claves se almacenan en la base de datos de la RA y se cifran con un token criptográfico (p. ej., de un HSM) en la RA, de modo que el material de claves es inaccesible para los operadores de la CA (siempre que tengan restringido el acceso a la RA). Sin embargo, los certificados y las entidades finales permanecen almacenados en la CA y pueden gestionarse (p. ej., revocarse) desde allí.
Para activar la generación de clave local, se deben seguir los pasos a continuación (esto se realiza en la RA que debe conservar los datos de recuperación de clave):
En Configuración del sistema, configure Habilitar recuperación de clave y Forzar generación de clave local .
Seleccione el token criptográfico que se utilizará para el cifrado de los pares de claves (datos de recuperación de clave).
Seleccione la clave deseada para el cifrado.
Las entradas de datos de recuperación pertenecientes a certificados registrados antes de habilitar la generación de claves local permanecerán en su base de datos inicial. Habilitar la generación de claves local no modifica la forma en que un administrador realiza la recuperación de claves, ni el flujo de trabajo de las aprobaciones ni las reglas de acceso requeridas. Tenga en cuenta que el rol que gestiona el conector de pares requiere (al menos) acceso al mismo conjunto de reglas que el administrador de la RA externa (por ejemplo, para realizar una recuperación de claves). Dado que esta función pretende mantener el material de claves inaccesible desde la CA mediante la generación y el almacenamiento del par de claves en la instancia local, no es posible usar la generación de claves local junto con contraseñas de entidad final generadas automáticamente (generadas por la CA).
Detalles técnicos
La operación bin/ejbca.sh ra keyrecovernewest , la opción de recuperación de clave en la interfaz de usuario de la CA y keyRecoverNewest en la API de WS marcan al usuario/certificado para la recuperación de claves. Esto significa que la próxima vez que se genere un almacén de claves (p12/jks/pem) para el usuario, la CA obtendrá la clave privada, cifrada en la base de datos de recuperación, y el certificado de usuario existente o uno nuevo, y creará un almacén de claves para el usuario con este par de claves antiguo. La recuperación real se producirá al llamar a pkcs12Req en la API de WS, o si el tipo de almacén de claves es P12, JKS o PEM en la interfaz de usuario de la CA.
Las claves se almacenan en la base de datos, en la tabla KeyRecoveryData. Los datos se almacenan cifrados en un mensaje CMS, como un par de claves Java serializado. El certificado no se almacena en KeyRecoveryData, sino únicamente en CertificateData. La clave de cifrado utilizada para el cifrado del mensaje CMS es la clave "keyEncryptKey" de la CA emisora y, por lo tanto, puede ser una clave en el HSM. El cifrado de datos CMS se realiza con AES256_CBC, utilizando una clave AES generada aleatoriamente (para este mensaje CM específico). La clave AES se encapsula utilizando la clave RSA en keyEncryptKey . Esto cumple plenamente con las mejores prácticas, es un estándar CMS abierto y estable.
La tabla KeyRecoveryData incluye columnas adicionales que permiten cambiar la clave keyEncryptKey de la CA emisora. Las columnas cryptoTokenId y keyAlias indican con precisión el token criptográfico y la clave específica utilizada para cifrar los datos. Al descifrar datos, primero se prueba esta clave específica, con este alias, en el token criptográfico de la CA; solo si falla, se prueba la clave keyEncryptKey de la CA. Además, el ID de la clave pública (que también aparece en CertificateData) de la clave pública utilizada para cifrar los datos se almacena en la columna publicKeyId. Esto significa que, incluso si las claves cambian, es posible identificar la clave pública exacta utilizada para descifrar los datos.
De manera similar, la columna serialNumber de la tabla KeyRecoveryData coincide con la columna serialNumber de la tabla CertificateData.
Importación de datos de recuperación de claves desde fuentes externas
Es posible importar datos de recuperación de claves desde una fuente externa, algo que puede ser muy útil al migrar a EJBCA desde otro producto PKI.
La importación de datos de recuperación de claves se realiza desde la línea de comandos, que proporciona ayuda en línea.
bin/ejbca.sh ra keyrecoveryimport --help