Guía de operaciones del CMP
A continuación se incluyen operaciones, configuraciones y flujos de trabajo que utilizan el Protocolo de administración de certificados (CMP).
Para obtener más información sobre CMP y cómo funciona con EJBCA, consulte la página de descripción general de CMP .
3GPP
Para operaciones y configuraciones específicas de 3GPP, consulte Operaciones 3GPP .
Comandos de muestra que utilizan CMP para OpenSSL
Inscripción en modo RA
cmpforopenssl funciona con EJBCA en modo RA con la siguiente configuración de EJBCA, utilizando por ejemplo el alias "opensslra" (configuraciones no mencionadas = predeterminadas):
CMP Operational Mode : RA ModeCMP Response Protection : pbeCMP Authentication Module : HMACCMP Authentication Parameters : passwordLuego puedes usar cmpforopenssl (como RA):
$ . /openssl genrsa 2048 > key1.pem$ . /openssl cmp -cmd ir -server localhost:8080 -path ejbca /publicweb/cmp/opensslra -srvcert ManagementCA.cacert.pem -ref NewUser -secret pass:password -certout clcert1.pem -newkey key1.pem -subject "/CN=NewUser/O=My Organization/C=SE"Esto solicita un certificado, definiendo el DN del sujeto que se utilizará. La CA utilizada para firmar el certificado se especifica en la configuración de CMP de EJBCA y puede obtenerse del ID de clave. EJBCA autenticó la solicitud mediante la protección HMAC con la contraseña y acepta cualquier solicitud tras una autenticación correcta.
Puede solicitar claves generadas por el servidor omitiendo la clave pública en la solicitud de certificado, utilizando la misma solicitud que un ir, pero sin la clave pública. Sin embargo, tenga en cuenta que no se puede usar cmpclient, ya que ningún parámetro de cmpclient permite omitir la clave pública. Para obtener un ejemplo de código Java, consulte la clase de prueba CrmfRequestTest.test12ServerGeneratedKeys().
Para el tipo de solicitud p10cr:
Primero genere un CSR del tipo PKCS10 y el par de claves RSA utilizando el siguiente comando (el indicador de asunto no se admite en el caso de p10cr):
openssl req -new -newkey rsa:2048 -nodes -out cmptestp10cr.csr -keyout cmptestp10cr.key -subj "/C=SE/ST=Stockholm/L=Solna/O=My Org/OU=IT/CN=cmptestp10cr"Luego use el siguiente comando openssl para obtener un certificado del backend cmp de EJBCA:
openssl cmp -cmd p10cr -server localhost:8080 -path ejbca /publicweb/cmp/opensslra -srvcert ManagementCA.cacert.pem -ref cmptestp10cr -secret pass:password -certout cmptestp10cr.pem -csr cmptestp10cr.csrTenga en cuenta que en el comando anterior, ref es el nombre común mencionado en el CSR y el secreto utilizado es de tipo contraseña y debe configurarse en el alias en consecuencia.
Revocar un certificado en modo RA
Para revocar un certificado emitido, la RA puede enviar una solicitud de revocación de CMP:
openssl cmp -cmd rr -server localhost:8080 -path ejbca /publicweb/cmp/opensslra -srvcert ManagementCA.cacert.pem -oldcert . /clcert1 .pem -secret pass:password -ref ffaabbTenga en cuenta que el valor de referencia es un valor aleatorio.
Inscripción en modo cliente con autenticación de contraseña HMAC
cmpforopenssl funciona con EJBCA en modo cliente, con autenticación de contraseña HMAC, utilizando la siguiente configuración de EJBCA con, por ejemplo, el alias "opensslclient" (configuraciones no mencionadas = predeterminadas):
CMP Authentication Module : HMACCMP Authentication Parameters : passwordExtract Username Component : CNAhora puedes agregar un nuevo usuario en EJBCA:
$ bin /ejbca .sh ra addendentity user1 --password password "CN=user1,O=My Organization,C=SE" ManagementCA 1 USERGENERATED$ bin /ejbca .sh ra setclearpwd user1 password$ bin /ejbca .sh ra setendentitystatus user1 10Luego puedes usar cmpforopenssl (como cliente):
$ . /openssl cmp -cmd ir -server localhost:8080 -path ejbca /publicweb/cmp/opensslclient -srvcert ManagementCA.cacert.pem -ref user1 -secret pass:password -certout clcert1.pem -newkey key1.pem -subject "/CN=user1/O=My Organization/C=SE"Esto solicita un certificado, y el DN del sujeto solicitado debe coincidir con el DN del sujeto registrado. EJBCA autentica la solicitud mediante la protección HMAC con la contraseña del usuario registrado. Consulte la documentación de CMP anterior para obtener una configuración más avanzada.
En el caso de solicitudes p10cr (asumiendo que existe un nuevo usuario1 con estado GENERADO en EJBCA):
Primero cree un CSR PKCS#10 usando el siguiente comando:
openssl req -new -newkey rsa:2048 -nodes -out user1.csr -keyout user1.key -subj "/C=SE/ST=Stockholm/L=Solna/O=My Org/OU=IT/CN=user1"Luego puede usar ese csr con el subcomando openssl p10cr para emitir un certificado de la siguiente manera:
openssl cmp -cmd p10cr -server localhost:8080 -path ejbca /publicweb/cmp/opensslclient -srvcert ManagementCA.cacert.pem -ref user1 -secret pass:password -certout user1p10cr.pem -csr user1.csr Inscripción en modo cliente, autenticación de certificado de cliente
cmpforopenssl funciona con EJBCA en modo cliente, con autenticación de certificado, utilizando la siguiente configuración de EJBCA con el alias tex. "openssleec" (configuraciones no mencionadas = predeterminadas):
CMP Authentication Module : EndEntityCertificateCMP Authentication Parameters : ManagementCA (use the CA that issues your client authentication certificate)Extract Username Component : CNAhora puede emitir un certificado usando la autenticación de certificado en EJBCA (la entidad final necesita un certificado antes, por lo que reutilizamos el usuario1 de arriba):
$ bin /ejbca .sh ra setclearpwd user1 password$ bin /ejbca .sh ra setendentitystatus user1 10Luego puedes usar cmpforopenssl (como cliente):
$ . /openssl cmp -cmd ir -server localhost:8080 -path ejbca /publicweb/cmp/openssleec -srvcert ManagementCA.cacert.pem -cert clcert.pem -key key.pem -certout clcert1.pem -newkey key1.pem -subject "/CN=user1/O=My Organization/C=SE"Esto solicita un certificado, y el DN del sujeto solicitado debe coincidir con el DN del sujeto registrado. EJBCA autentica la solicitud mediante la protección de firma con el certificado del usuario registrado. Consulte la documentación de CMP anterior para obtener una configuración más avanzada.
También puedes utilizar un 'cr' en lugar de un 'ir';
$ bin /ejbca .sh ra setendentitystatus user1 10. /openssl cmp -cmd cr -server localhost:8080 -path ejbca /publicweb/cmp/openssleec -srvcert ManagementCA.cacert.pem -cert clcert.pem -key key.pem -certout clcert1.pem -newkey key1.pem -subject "/CN=user1/O=My Organization/C=SE"En caso de mensaje p10cr, puede utilizar el siguiente comando openssl (establezca el estado del usuario1 nuevamente a 10 antes):
openssl cmp -cmd p10cr -server localhost:8080 -path ejbca /publicweb/cmp/openssleec -srvcert ManagementCA.cacert.pem -ref user1 -cert user1p10cr.pem -certout user1p10cr2.pem -csr user1.csr -key user1.keyuser1.key es la clave utilizada para firmar el CSR original.
Inscripción del dispositivo con contraseña HMAC
Un flujo de trabajo PKI típico que utiliza CMP implica inscribir un dispositivo con un certificado y luego hacer que el dispositivo renueve automáticamente el certificado cuando esté a punto de vencer.
Generar un par de claves.
Inscripción inicial de certificado de cliente mediante un código de inscripción único.
Generar un nuevo par de claves.
Renovar con un nuevo certificado para el nuevo par de claves, autenticado utilizando el par de claves y el certificado antiguos.
Los pasos anteriores se pueden simular en la realidad utilizando el cliente openssl y cmpforopenssl , pero también utilizando el EJBCA cmpclient .
Esto funciona con un cmpalias predeterminado (llamado cmp) configurado con los parámetros:
CMP Authentication Module : HMACCMP Authentication Parameters : passwordExtract Username Component : CNGenerar un par de claves:
$ ./opensslgenrsa -out certs/cl_key.pem 2048Inscripción inicial:
Antes de la inscripción inicial, agregue una nueva entidad final en EJBCA, en este ejemplo con el nombre de usuario cmptest y el DN de sujeto 'CN=cmptest', y el código de inscripción 'CMP-pwd' (se debe configurar una contraseña de texto sin cifrar para el usuario cmptest).opensslcmp-cmd ir -server localhost:8080 -path ejbca/publicweb/cmp/cmp-srvcert ManagementCA.cacert.pem -ref cmptest -secret pass:CMP-pwd-newkey certs/cl_key.pem -certout certs/cl_cert.pem -subject"/CN=cmptest"Generar un nuevo par de claves:
$ ./opensslgenrsa -out certs/cl_new_key.pem 2048Renovar con un nuevo certificado (el estado del usuario cmptest debe volver a ser 10 (NUEVO)):
opensslcmp-cmd kur -server localhost:8080 -path ejbca/publicweb/cmp/cmp-srvcert ManagementCA.cacert.pem -key certs/cl_key.pem -cert certs/cl_cert.pem -newkey certs/cl_new_key.pem -certout certs/cl_new_cert.pemPara la actualización de clave del tipo de solicitud p10cr, primero genere un nuevo par de claves:
openssl genrsa -out certs /cl_new_key_p10cr .pem 2048Establezca el estado del usuario cmptestp10cr (asumiendo que ya existe en EJBCA) nuevamente en NUEVO (10):
bin /ejbca .sh ra setendentitystatus cmptestp10cr 10Y actualice las claves (obteniendo un nuevo certificado) usando el nuevo par de claves generado anteriormente con el siguiente comando:
openssl cmp -cmd kur -server localhost:8080 -path ejbca /publicweb/cmp/cmp -srvcert ManagementCA.cacert.pem -key cmptestp10cr.key -cert cmptestp10cr.pem -newkey certs /cl_new_key_p10cr .pem -certout p10cr_new_cert.pem Manejo personalizado de solicitudes de certificados
Se puede añadir una clase de complemento personalizada para gestionar una solicitud de certificado. La clase que implementa este complemento debe implementar la interfaz org.ejbca.core.protocol.ExtendedUserDataHandler.
Para obtener más información, consulte Creación de procesadores de solicitudes personalizados.
Ejemplos de mensajes para clientes
Si bien existen muchos clientes CMP (como se indica en la página de descripción general de CMP ), muchos casos de uso requieren la creación de clientes personalizados. Utilizando las bibliotecas de cifrado de BouncyCastle , hemos creado algunas implementaciones de ejemplo en Java si necesita ayuda para empezar.
Para obtener más información, consulte Soporte al cliente de CMP .