Uso de CertBot para emitir certificados con ACME a un servidor web Apache
Introducción
Este documento de integración muestra cómo usar el popular agente ACME CertBot para crear y renovar automáticamente certificados TLS para un servidor web Apache . La misma configuración se puede usar fácilmente para otros servidores web compatibles con CertBot, por ejemplo, NGINX . Con un certificado TLS, se puede acceder al servidor web mediante el protocolo HTTPS y todo el tráfico entrante y saliente está cifrado.
A continuación se describe cómo emitir certificados TLS privados para su uso en su organización.
Prerrequisitos
La emisión de certificados de host web mediante ACME utiliza el DNS para autorizar la emisión de certificados para un dominio específico. Por lo tanto, es importante que tanto el host web como la CA tengan los FQDN correctos y que estos se encuentren en el DNS. La CA debe poder acceder al servidor web consultando su FQDN en el DNS.
Para completar la emisión se requieren los siguientes requisitos previos:
EJBCA
EJBCA Enterprise (con soporte ACME) implementado en un servidor Ubuntu, configurado con:
Una CA que emitirá certificados de servidor web
Un perfil de certificado en EJBCA para los certificados del servidor web
Un perfil de entidad final en EJBCA para los certificados de servidor web que está configurado para usar el perfil de certificado de servidor web
Servidor web Apache
Un servidor/VM instalado con Ubuntu 19.04 (como se usa en esta guía, otros sistemas operativos deberían funcionar de la misma manera/de manera similar)
Registros de host DNS
Un registro de host para el servidor de CA, utilizado por el servidor web para comunicarse con la CA (en esta guía ejbca.example.com)
Un registro de host para el servidor web, utilizado por la CA para contactar al servidor web para la autorización ACME http-01 (en esta guía tgacme.com y www.tgacme.com)
Emitir certificado TLS de servidor web a través de ACME con CertBot
Para completar la emisión de un certificado de servidor web, siga los pasos descritos en las secciones siguientes.
Paso 1: Configuración del certificado de CA de confianza
Para contactar con el servidor de la CA mediante HTTPS , el certificado de la CA que firma los certificados TLS de sus servidores (EJBCA y Apache) debe estar instalado como de confianza en sus sistemas, tanto en el host EJBCA como en el host web. De lo contrario, CertBot no podrá comunicarse con la CA.
En esta guía, se utiliza la CA de administración (una CA raíz) y el certificado de la CA de administración se ha descargado como /tmp/ManagementCA.cacert.pem .
Ejecute lo siguiente en ambos servidores:
sudo mkdir /usr/share/ca-certificates/extra/sudo cp /tmp/ManagementCA.cacert.pem /usr/share/ca-certificates/extra/ManagementCA.cacert.crtecho 'extra/ManagementCA.cacert.crt' | sudo tee -a /etc/ca-certificates.confsudo update-ca-certificatesA continuación, compruebe que puede acceder al servidor de la CA tanto desde la propia CA como desde el servidor web. Ejemplo de URL: https://ejbca.example.com:8442/
Paso 2: Configurar EJBCA en el host de CA
Realice los siguientes pasos para configurar EJBCA en el host de CA:
Para configurar la CA de administración para permitir el mismo DN de sujeto en múltiples entidades finales:
En la interfaz de administración de EJBCA, haga clic en Autoridades de certificación > CA de administración > Editar y configure lo siguiente:
Aplicar claves públicas únicas = sin marcar.
Aplicar DN único = sin marcar.
Para crear un perfil de certificado de servidor, SslServerProfile:
Para clonar el perfil del certificado SERVIDOR, haga clic en Perfiles de certificado>SERVIDOR>Clonar y configure lo siguiente:
Uso extendido de clave = Autenticación del servidor.
CA disponible: Cualquier CA.
Para crear un perfil de entidad del extremo del servidor, SslServerProfile:
En la interfaz de administración de EJBCA, haga clic en Perfiles de entidad final > Agregar perfil y configure lo siguiente:
Entidad final Correo electrónico: Uso, Modificable.
Atributos DN del sujeto: solo CN, obligatorio y modificable.
Nombre alternativo del sujeto: dos DNSName.
Perfil de certificado predeterminado/disponible: SslServerProfile.
CA predeterminada/disponible: CA de administración.
Habilite el protocolo ACME en Configuración del sistema>Configuración del protocolo .
Agregue un alias ACME en EJBCA:
En la interfaz de administración de EJBCA, haga clic en Configuración ACME > Agregar y configure lo siguiente:
Perfil de entidad final: SslServerProfile.
URL del sitio: https://www.primekey.com/
Condiciones de servicio URL: https://primekey.com/products/software/
Resolución DNS: 8.8.8.8.
Establezca el alias ACME como configuración ACME predeterminada en la Descripción general de configuración de ACME ( IU de administración de EJBCA>Configuración de ACME ).
A continuación se muestra un ejemplo de configuración de alias ACME:

Captura de pantalla de un ejemplo de configuración de ACME
Paso 3: Instalar CertBot en el host del servidor web Apache
En el host web, instale CertBot con el siguiente comando. Tenga en cuenta que podría ser necesario ejecutar "sudo apt update" en una nueva instalación.
sudo apt install python3-certbot-apacheEl comando anterior instala automáticamente el servidor web Apache2.
Paso 4: Emitir certificado de servidor web
Primero, para probar que https no está disponible, pruebe lo siguiente en un navegador web:
http://tgacme.com - Debería mostrar la página web predeterminada de Apache
https://tgacme.com - Debería mostrar un error que indica que el navegador no puede conectarse
A continuación, ejecute certbot para instalar el certificado desde el servidor EJBCA:
sudo certbot --server https: //ejbca.example.com:8442/ejbca/acme/directory -d tgacme.com --apache --agree-tos --email admin@example.com --no-eff-email --noninteractiveLuego prueba nuevamente con el navegador web:
https://tgacme.com - Ahora debería conectarse y mostrar la página web predeterminada de Apache.
Además, puede ir a la página de visualización de certificados de su navegador web e inspeccionar el certificado del servidor web (que el emisor es la CA de administración privada).
Paso 5: Configurar CertBot para la monitorización automática de la caducidad
Ahora puede configurar CertBot para la monitorización automática de la caducidad. Para obtener información sobre la configuración de CertBot, consulte la documentación de CertBot .
Notas adicionales
Roles y responsabilidades
En esta guía se utilizan al menos tres roles distintos y es posible que haya más roles relevantes.
Administrador de CA : realiza la configuración de EJBCA. Este rol puede subdividirse para la separación de roles de CA, por ejemplo:
Administrador de políticas de CA, que configura perfiles de certificado y de entidad final, garantizando que se emitan certificados con el formato adecuado.
Administrador de protocolo CA, configurando alias ACME.
Administrador del servidor web , realiza la configuración del servidor Apache y CertBot en el host web.
Administrador de DNS , agregando registros al DNS habilitando la autorización ACME.
Además, se recomienda supervisar todos los servidores web para detectar certificados vencidos. Existe una gran variedad de herramientas para ello, y probablemente esté incluida en la solución de monitorización de servidores de su organización.
Limpiar/Restablecer el servidor web para que vuelva a funcionar
Se puede ejecutar un script simple en el host web para reinstalar Apache y CertBot, lo que hace que sea sencillo ejecutar la prueba tantas veces como desee, con la misma instalación nueva cada vez.
A continuación se detallan los pasos para describir el proceso, aunque el script también se puede ejecutar durante la configuración inicial.
/home/user/certbot-reinstall.shEl script hace lo siguiente:
#!/bin/bashsudo apt-get -yq remove --purge python3-certbot-apachesudo apt-get -yq remove --purge apache2sudo rm -rf /etc/letsencryptsudo rm -rf /etc/apache2sudo apt-get -yq --ignore-missing install python3-certbot-apachePrueba con el navegador:
http://tgacme.com - Muestra la página web predeterminada de Apache
https://tgacme.com - Muestra un error que indica que el navegador no puede conectarse.
sudo certbot --server https://ejbca.example.com:8442/ejbca/acme/directory -d tgacme.com --apache --agree-tos --email admin@example.com --no-eff-email --noninteractive
Prueba con el navegador:
https://tgacme.com - Se conecta y muestra la página web predeterminada de Apache.
Mostrar el certificado del servidor web en el navegador (y verificar que proviene de la CA de administración privada)
CertBot en un host nuevo con Ubuntu 18.04 o inferior
Sin actualizar los repositorios de Ubuntu, se instalará el cliente 0.23. Este es anterior y no es compatible con la versión EJBCA posterior a la 7.3.0.
Para instalar una versión más nueva de CertBot, utilice los siguientes comandos:
sudo apt-get -y updatesudo apt-get -y install software-properties-commonsudo add-apt-repository -y universesudo add-apt-repository -y ppa:certbot /certbotsudo apt-get -y updatesudo apt-get -y install certbot python3-certbot-apache