GNU/Linux >> Tutoriales Linux >  >> Linux

Instale Let's Encrypt SSL en HAProxy

Resumen

Seguiremos los pasos para instalar Let's Encrypt SSL en HAProxy. Además de instalar y configurar haproxy con Let's encrypt certbot y adquirir ssl, también cubriremos cómo renovar el certificado automáticamente. Las instrucciones escritas se realizan en servidores GNU/Linux (Debian en este caso).

Requisitos previos:

  • HAProxy instalado
  • Cerbot instalado

Nota: HAProxy y Certbot están instalados en el mismo servidor en este ejemplo.

Instala Let's Encrypt SSL en HAProxy

Configuración de HAProxy SSL

HAProxy debe configurarse para poder adquirir el certificado SSL, lo que significa pasar las solicitudes de Certbot y hacer cumplir el protocolo HTTPS.

Un ejemplo de la configuración se parece a esto:

frontend haproxy
    #public IP address binded
    bind 123.123.123.123:80
    bind 123.123.123.123:443 ssl crt /etc/ssl/example.com.pem

    # HTTPS redirect
    redirect scheme https code 301 if !{ ssl_fc }

    mode http
    default_backend test_site

    acl letsencrypt-acl path_beg /.well-known/acme-challenge/
    use_backend letsencrypt-backend if letsencrypt-acl

backend test_site
    mode http
    server test_site1 10.0.51.11:80 check inter 5s rise 3 fall 2
    server test_site2 10.0.51.12:80 check backup inter 5s rise 3 fall 2

backend letsencrypt-backend
    server letsencrypt 123.123.123.123:80

Y revisaremos la configuración y la explicaremos.

Primero definimos la interfaz haproxy:

frontend haproxy 
#public IP address binded 
bind 123.123.123.123:80
bind 123.123.123.123:443 ssl crt /etc/ssl/example.com.pem

Para este ejemplo, en la interfaz vinculamos la dirección IP pública y los puertos 80 y 443 para HTTP y HTTPS. La dirección IP privada también se puede vincular. También definimos

en el enlace del puerto 443, ¿dónde se encuentra el certificado SSL en nuestra máquina servidor HAProxy y el nombre de archivo del certificado SSL?

# HTTPS redirect
redirect scheme https code 301 if !{ ssl_fc }

Este comando fuerza la redirección https todo el tiempo.

mode http 
default_backend test_site 
acl letsencrypt-acl path_beg /.well-known/acme-challenge/ 
use_backend letsencrypt-backend if letsencrypt-acl

Aquí definimos un nombre para nuestros servidores backend e instruimos a Haproxy para que use el servidor backend Let's encrypt, que también está definido, si detecta el desafío acme de Let's encrypt para el nombre de dominio.

backend test_site
mode http
server test_site1 10.0.51.11:80 check inter 5s rise 3 fall 2
server test_site2 10.0.51.12:80 check backup inter 5s rise 3 fall 2

backend letsencrypt-backend
server letsencrypt 123.123.123.123:80

Para el back-end, definimos dos servidores como ejemplo que actuarán como servidores web para nuestro sitio de prueba, al que Haproxy puede rastrear y equilibrar la carga del tráfico.

Además, también se define el servidor backend Let's encrypt, que es el mismo servidor donde hemos instalado Haproxy.

Adquirir el certificado SSL

Para adquirir el certificado ssl de Let's encrypt mientras Haproxy está activo, ejecute uno de estos dos comandos en el servidor donde están instalados Haproxy y Certbot:

sudo certbot certonly --standalone --preferred-challenges http --http-01-address 123.123.123.123 --http-01-port 80 -d example.com --non-interactive --agree-tos --email [email protected]

sudo certbot certonly --standalone --preferred-challenges http --http-01-port 80 -d example.com --non-interactive --agree-tos --email [email protected]

Esencialmente, ambos comandos hacen lo mismo y puede probar cualquiera de ellos, solo agregamos el argumento del primer comando con la dirección IP pública, si en algún caso el segundo comando no funciona. Entonces, en los comandos declaramos qué desafío usar, qué puerto escuchar, especificamos el nombre de dominio para el cual certbot solicita un SSL, aceptamos los TOS y proporcionamos una dirección de correo electrónico.

Cuando ejecute uno de estos comandos, simplemente reemplace el ejemplo.com con su dominio para el que desea el certificado SSL, reemplace la 123. dirección IP con la IP de su servidor y proporcione un correo electrónico legítimo para recibir las notificaciones de let's encrypt .

Aunque adquirimos el certificado SSL y es válido, el Haproxy no puede usarlo. Para que Haproxy use el certificado ssl de Let's encrypt, el certificado ssl debe guardarse en un solo archivo. Haproxy requiere que el certificado SSL esté en un solo archivo.

El certificado de Let's encrypt viene en tres archivos separados:la cadena completa, la clave privada y el archivo de certificado. Para que Haproxy use ssl y https, es suficiente tener la cadena completa y la clave privada en el archivo único. Podemos crear un único archivo de certificado SSL y luego configurar Haproxy para usarlo. Podemos copiar el contenido de los archivos de certificado y copiarlos en el único archivo .pem que será nuestro certificado SSL para Haproxy.

Para lograr esto, podemos hacerlo con un comando como este:

sudo cat "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem" > "/etc/ssl/example.com.pem"

Los archivos de certificado Let's encrypt se encuentran en el directorio let's encrypt. Cada certificado SSL se organiza en un directorio denominado como nombre de dominio. Este comando toma el contenido de los certificados y los coloca en un solo archivo. Luego podemos decirle y configurar Haproxy para usar este archivo, como en la configuración de arriba. Por supuesto, reemplace example.com con su nombre de dominio y agregue en la configuración de Haproxy la ubicación del archivo de certificado SSL que acaba de crear como en la configuración al comienzo de la publicación.

Después de esto y una vez agregado en el archivo de configuración de Haproxy la ubicación del certificado SSL a usar, reinicie el servicio de Haproxy:

sudo systemctl restart haproxy.service

Renovación automática del certificado SSL HAProxy

Una cosa a tener en cuenta al usar este tipo de configuración para que Haproxy use el certificado SSL es que con este método creamos un archivo personalizado para usar el certificado y con este método, el certificado SSL no se renovará cuando caduque. Bueno, el certbot renovará el certificado de Let's encrypt pero luego Haproxy no podrá usar el nuevo certificado.

Sin embargo, todavía podemos crear una configuración con certbot y Haproxy para renovar también el certificado SSL para Haproxy. Para esto, necesitaremos crear un script bash y configurar cerbot para usarlo y ejecutarlo con un gancho posterior después de que el certbot haya renovado el certificado de Let's Encrypt. Let's Encrypt certbot de forma predeterminada tiene habilitada la renovación automática y ha configurado un trabajo cron para ejecutar una renovación. De forma predeterminada, Let's Encrypt ssl tiene una duración de 3 meses y cerbot renovará el certificado antes de que caduque. Por lo tanto, nuestra configuración para la renovación de ssl para Haproxy es que, cuando el certbot renueve el certificado ssl, ejecutará nuestro script bash post-hook, que creamos y colocamos en el directorio post-hook, para que Haproxy pueda usar el nuevo ssl certificado.

Un script de bash se vería así:

#!/bin/bash

sudo cat "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem" > "/etc/ssl/example.com.pem"
sudo systemctl restart haproxy.service

Estos son esencialmente los dos comandos anteriores que ejecutamos para crear el archivo de certificado SSL personalizado para que lo use Haproxy. Colocaremos este script en el directorio Let's encrypt post-hook de nuestro directorio de configuración de nombre de dominio. Como en la imagen de abajo:

sudo touch /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh

sudo nano  /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh

Puede crear el script y pegarlo con estos comandos.

Luego, en el archivo de configuración del dominio en Let's Encrypt, agregue el parámetro post_hook para ejecutar el script bash que creamos:

sudo nano /etc/letsencrypt/renewal/example.com.conf

Aquí puede notar que usamos la herramienta sh para ejecutar nuestro script. Esa es una forma de hacerlo. Pero también puede hacer que el script sea ejecutable con sudo chmod +x y funcionará también. Y este fue el último paso. Lo hemos hecho.

Resumen

Hemos cubierto el procedimiento de cómo instalar Let's Encrypt SSL en HAProxy y cómo realizar la renovación automática para haproxy con let'sencrypt cerbot también. Al menos, una forma de cómo hacerlo. Si necesita más información para comprender cómo funciona HAProxy, puede consultar esta publicación donde explicamos cómo funciona haproxy y repasamos la configuración de ejemplo, donde explicamos la configuración en detalle.

Muchas gracias por tu tiempo…


Linux
  1. Cómo instalar Let's Encrypt SSL para NGINX en Rocky Linux 8

  2. Cómo instalar Let's Encrypt SSL en Apache en Debian 11

  3. Cómo instalar Let's Encrypt SSL en Nginx en Debian 11

  4. ¿Cómo instalar Let's Encrypt (Certbot) en CentOS 8?

  5. Cómo instalar Let's Encrypt SSL en Ubuntu 18.04 con Nginx

Cómo instalar Let's Encrypt SSL usando DirectAdmin

Cómo instalar Nginx con Let's Encrypt SSL en Fedora 35

Cómo instalar Let's Encrypt SSL en Ubuntu con Apache

Cómo instalar Let's Encrypt SSL para Nginx en Ubuntu 18.04 LTS

Cómo instalar Nginx con Let's Encrypt SSL en Ubuntu 20.04 LTS

Cómo usar Let's Encrypt con Cloudflare