Generar Certificado SSL Wildcard de Let’s Encrypt en Apache y Nginx

El Certificado SSL es una tecnología que asegura la protección de la información transmitida entre un servidor web y un cliente web. Esto se logra a través del cifrado de datos, lo que reduce el riesgo de piratería en sitios y aplicaciones web. Un certificado SSL instalado en un servidor web garantiza esta conexión segura y contiene información sobre la clave pública del sitio web, su identidad y cualquier otra información relevante. Cualquier cliente que intente comunicarse con el servidor original debe consultar el archivo para obtener la clave pública y la identidad del sitio web.

Let’s Encrypt es una autoridad de certificación que ofrece certificados SSL/TLS gratuitos para facilitar el tráfico HTTP cifrado en servidores web. Proporciona una herramienta de software llamada certbot que simplifica la instalación de SSL automatizando gran parte del proceso. En esta guía se explica cómo usar el certificado SSL Let’s Encrypt Wildcard con Apache en Ubuntu/CentOS.

Instalar Certbot en Ubuntu | CentOS

Para instalar certbot en Ubuntu y CentOS vamos a ejecutar el comando como se muestra a continuación:

Servidor web Nginx

Ubuntu / Debian

apt install certbot python3-certbot-nginx

CentOS 8 / CentOS Stream 8 / Rocky Linux 8 / AlmaLinux 8

yum -y install epel-release
dnf config-manager --set-enabled powertools
yum -y install certbot python3-certbot-nginx nginx

CentOS 7

yum -y install epel-release
yum -y install certbot python2-certbot-nginx nginx

Servidor web Apache

Ubuntu / Debian

apt install certbot python3-certbot-apache

CentOS 8 / CentOS Stream 8 / Rocky Linux 8 / AlmaLinux 8

yum -y install epel-release
dnf config-manager --set-enabled powertools
yum -y install certbot python3-certbot-apache httpd

CentOS 7

yum -y install epel-release
yum -y install certbot python2-certbot-apache httpd

Verificar las configuraciones del servidor web

Nginx

nano /etc/nginx/conf.d/example.com.conf

Agregar el nombre del servidor y el alias aquí.

server_name example.com www.example.com;

Apache

Ubuntu / Debian

nano /etc/apache2/sites-available/example.com.conf

CentOS / Rocky Linux / AlmaLinux

nano /etc/httpd/conf.d/example.com.conf

Configurar el nombre de servidor y nombre de alias como se muestra a continuación:

ServerName example.com
ServerAlias www.example.com

Cómo emitir un certificado SSL Let’s Encrypt Wildcard usando Certbot (Modo manual)

Ahora que hemos verificado los hosts virtuales del servidor web, es el momento de solicitar el SSL Wildcard de Let’s Encrypt. Un SSL Wildcard es un tipo de certificado SSL que cubre el dominio principal y todos sus subdominios. Por ejemplo, si se tiene un SSL Wildcard para *.example.com, también se protegería something.example.com, one.example.com, etc.

Ejecutar el comando como se muestra a continuación para solicitar SSL para *.example.com.

certbot certonly \
--agree-tos \
--email [email protected] \
--manual \
--preferred-challenges=dns \
-d *.example.com \
--server https://acme-v02.api.letsencrypt.org/directory

A continuación se describen los distintos parámetros utilizados en el comando anterior:

  • «certonly»: esta opción nos asegura de que solo queremos emitir un certificado SSL. Si eliminamos esta opción del comando, Certbot emitirá el certificado SSL y también actualizará el archivo de host virtual para aplicar el certificado SSL.
  • «agree-tos»: se usa para aceptar los términos de servicio de Let’s Encrypt.
  • «email»: se proporciona un correo electrónico para almacenar el SSL en la cuenta de Let’s Encrypt. Se utilizará para notificarnos cuando el SSL esté a punto de caducar.
  • «manual»: esto nos lleva a una forma interactiva de emitir el SSL en la que se nos solicitará más información.
  • «preferred-challenges»: especifica el método de verificación SSL. El nombre de dominio debe verificarse antes de emitir el SSL. En este caso, estamos seleccionando DNS.
  • «d»: se usa para especificar los dominios para emitir el certificado SSL.
  • «server»: se utiliza para especificar el extremo de la API para emitir el certificado SSL.

Una vez que ejecutemos el comando, recibiremos un registro TXT que deberemos agregar al servidor DNS. Los registros se verán de la siguiente manera:

Renovación del certificado

Para renovarlo es necesario programar una tarea en crontab

crontab -e

Agregar el siguiente código:

certbot renew --pre-hook "service apache2 stop" --post-hook "service apache2 start"

Entradas relacionadas