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.crt
echo 'extra/ManagementCA.cacert.crt' | sudo tee -a /etc/ca-certificates.conf
sudo update-ca-certificates

A 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:

  1. 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.

  2. 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.

  3. 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.

  4. Habilite el protocolo ACME en Configuración del sistema>Configuración del protocolo .

  5. Agregue un alias ACME en EJBCA:

  6. 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:

imágenes/descargar/archivos adjuntos/93587213/acmeserver-alias.png
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-apache

El 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:

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 --noninteractive

Luego 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.

  1. 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.

  2. Administrador del servidor web , realiza la configuración del servidor Apache y CertBot en el host web.

  3. 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.sh

El script hace lo siguiente:

#!/bin/bash
sudo apt-get -yq remove --purge python3-certbot-apache
sudo apt-get -yq remove --purge apache2
sudo rm -rf /etc/letsencrypt
sudo rm -rf /etc/apache2
sudo apt-get -yq --ignore-missing install python3-certbot-apache
  • Prueba 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 update
sudo apt-get -y install software-properties-common
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:certbot /certbot
sudo apt-get -y update
sudo apt-get -y install certbot python3-certbot-apache