ACME con acme.sh
EMPRESA Esta es una característica de EJBCA Enterprise.
A continuación se explica cómo instalar y utilizar el cliente ACME acme.sh.
Para obtener información general sobre ACME (Entorno de gestión automática de certificados), consulte ACME .
Acme.sh es un cliente del protocolo ACME escrito en lenguaje Shell (shell de Unix), compatible con los shells bash, dash y sh. Para más información, consulte acme.sh en GitHub .
Instalación y funcionamiento
Versiones compatibles
EJBCA Enterprise admite acme.sh versión 3.0.4.
La última versión probada con EJBCA Enterprise es acme.sh 3.0.4.
Tenga en cuenta que dado que la validación del desafío de EJBCA es sincrónica, debe utilizar una versión adaptada del script acme.sh.
Descargar
Descargue o instale acme.sh desde el repositorio de GitHub https://github.com/acmesh-official/acme.sh .
Funciones compatibles
Las siguientes son las funciones destacadas admitidas:
acme.sh admite las aprobaciones EJBCA para la gestión de cuentas ACME.
acme.sh admite la inscripción de certificados para identificadores de IP.
acme.sh admite EAB (enlaces de cuentas externas) como se especifica en la sección 7.3.4 del RFC 8555 , así como también con clave pública o certificado.
Prerrequisitos
A continuación se enumeran los requisitos previos:
Sistema operativo basado en Linux, Mac OSX o MS Windows, incluyendo Cygwin. Para más información, consulte la sección "Sistemas operativos probados" en acme.sh en GitHub .
Herramientas del sistema como curl o wget.
Permisos de superusuario.
Un servidor web como Apache2 o Nginx.
Instalación
Descargue y descomprima la última versión desde https://github.com/acmesh-official/acme.sh .
Postinstalación
Establecer la URL del punto final ACME para acme.sh
La URL ACME predeterminada definida en la versión acme.sh de EJBCA es https://localhost:8442/ejbca/acme/directory .
Puede utilizar la opción --server con acme.sh para especificar esta URL o editar la variable $CA_EJBCA de la línea 24 de acme.sh.
Cree un directorio de desafíos para su servidor web
Si desea utilizar la validación de desafío http-01 (predeterminada para acme.sh), asegúrese de que acme.sh pueda escribir en la carpeta de desafío del servidor web, generalmente ubicada en /var/www/html/.well-known/acme-challenge.
El servidor web debe abrir el puerto 80 para servir el token de desafío con HTTP: http://<nombre de host>/.well-known/acme-challenge/<nombre de archivo>.
$ mkdir -p /var/www/html/.well-known/acme-challenge Restablecer acme.sh
Para restablecer acme.sh, mueva o elimine todos los archivos o carpetas debajo de ~/.acme.sh.
$ rm -rf ~/.acme.sh/* Mostrar ayuda con acme.sh -h
Utilice la ayuda de acme.sh para obtener información detallada y consulte más información sobre acme.sh en GitHub .
$ ./acme.sh -h Ejecutar comandos de conveniencia acme.sh
acme.sh admite muchas funciones individuales, como generar claves de cuenta, claves de dominio o CSR, o llamar a recursos ACME, así como comandos convenientes que procesan un flujo de trabajo ACME completo con una sola llamada CLI, como el comando de opción --issue .
Flujo de trabajo del comando acme.sh --issue option:
Si no hay ninguna cuenta ACME registrada, acme.sh genera localmente un par de claves de cuenta para registrar una nueva en el servidor de CA (use la opción -ak para especificar la clave de cuenta). De lo contrario, acme.sh intenta recuperar una cuenta existente utilizando la clave de cuenta almacenada en el sistema.
acme.sh solicita el recurso de pedido del servidor CA y recibe el objeto de pedido recién creado, incluidas todas las autorizaciones y desafíos necesarios para inscribir el certificado para los identificadores dados.
acme.sh coloca el token de desafío en el directorio de desafío del servidor web local.
acme.sh solicita el recurso de desafío de los servidores de CA.
EJBCA verifica la respuesta al desafío con HTTP.
acme.sh elimina el token de desafío.
acme.sh genera un par de claves y publica una CSR para que el certificado se inscriba en el recurso de finalización de los servidores de CA.
EJBCA inscribe y almacena el certificado.
acme.sh descarga el certificado utilizando la URL en el orden del objeto recibido con la respuesta de finalización del recurso.
$ ./acme.sh --issue -d example.com -w /var/www/html --insecure --force --debug3-k ec-256-ak2048
Después de reiniciar acme.sh, el script registra una nueva cuenta ACME después de generar una nueva clave de cuenta especificada con la opción -ak , para inscribir un certificado para example.com con la especificación de clave proporcionada con la opción -k .
Si necesita atributos de DN de sujeto adicionales o extensiones de certificado adicionales para cumplir con las restricciones de entidad final y perfil de certificado, genere su CSR con el comando de opción --create-csr e inscriba su certificado usando la opción -csr .
Registro de cuenta con aprobaciones e inscripción de certificados
Seleccione un perfil de aprobación en el campo de configuración de alias de ACME " Requerir aprobación para el registro de la cuenta" . Para obtener más información sobre los campos de configuración de alias de ACME, consulte ACME .
Asegúrate de no tener una cuenta ya registrada. Para obtener información sobre cómo restablecer acme.sh, consulta Restablecer acme.sh.
Repita el comando de conveniencia descrito en Ejecutar comandos de conveniencia acme.sh más arriba.
$ ./acme.sh --issue -d example.com -w /var/www/html --insecure --force --debug 3 -k ec- 256 -ak 2048acme.sh registrará un mensaje de error como el siguiente.
$ [...] Register account Error: {"detail":"A request to register your ACME account has been sent for approval. RequestID=694243043","type":"urn:ietf:params:acme:error:approvalRequiredForAccountRegistration"}Repita el comando después de que los administradores especificados en el perfil de aprobación aprueben su solicitud. Su cuenta quedará registrada y su certificado inscrito.
Ejecutar comandos acme.sh
A continuación se describen los comandos acme.sh para manejar cuentas y certificados ACME.
Registrar una cuenta ACME
Para registrar una cuenta ACME, ejecute:
$ ./acme.sh --register-account --insecure --force --email test @primekey .comEl comando "register" se puede usar tanto con aprobaciones como con EAB. Tenga en cuenta que el comando acme.sh --issue option no parece reconocer las opciones --eab.
--email especifica la información de contacto de la cuenta.
$ ./acme.sh --register-account --insecure --force --eab-kid 9UiJbZzO7WtuAU4IDsxNsNaMFl4 --eab-hmac-key Xs8Yi_fYdxWDRKupHMpjewjHAvduSAd1d5QeEKucs5Eacme.sh confirma la cuenta registrada mostrando la huella digital de la cuenta.
[...] Create account key ok.[...] Registering account: https://localhost:8442/ejbca/acme/directory[...] Registered[...] ACCOUNT_THUMBPRINT='Fg4_hKmJafc0N_Gviqo-8Xj6GtTDiW4lASS8f6Gb9Lw' Actualizar una cuenta ACME
Para actualizar la información de contacto de los titulares de la cuenta:
$ ./acme.sh --update-account --insecure --force --email test @primekey .comacme.sh confirma la actualización de la cuenta mostrando la URL de la cuenta (incluido el KID).
$ [...] account update success for https: //localhost:8442/ejbca/acme/acct/KpKGJr3I3auSKxvQBK2PVA. Desactivar una cuenta ACME
Desactive la cuenta si no desea inscribir más certificados con esta cuenta.
$ ./acme.sh --deactivate-account --insecure --forceacme.sh confirma la desactivación de la cuenta mostrando la URL de la cuenta (incluido el KID).
$ [...] Deactivate update success for https: //localhost:8442/ejbca/acme/acct/KpKGJr3I3auSKxvQBK2PVA. Revocación de certificado
Los motivos de revocación se pueden especificar de 0 (sin especificar) a 10. Para obtener más información, consulte https://github.com/acmesh-official/acme.sh/wiki/revokecert .
$ ./acme.sh --revoke --domain example.com --ecc --revoke-reason 0 Renovación de certificado
No elimine el certificado antes de renovarlo.
Tenga en cuenta que no puede utilizar nombres de usuario ALEATORIOS si la CA emisora exige un DN de sujeto único para cada certificado inscrito.
$ ./acme.sh --renew --domain example.com --ecc --force Eliminación de certificado
Con el siguiente comando de opción, el certificado se elimina de la lista de certificados acme.sh.
$ ./acme.sh --remove --domain example.com --ecc Tenga en cuenta que el par de claves, la CSR y el certificado no se eliminan.