GNU/Linux >> Tutoriels Linux >  >> Linux

Installer Let's Encrypt SSL sur HAProxy

Aperçu

Nous allons passer en revue les étapes d'installation de Let's Encrypt SSL sur HAProxy. En plus d'installer et de configurer haproxy avec Let's encrypt certbot et d'acquérir SSL, nous allons également expliquer comment renouveler automatiquement le certificat. Les instructions écrites sont exécutées sur des serveurs GNU/Linux (Debian dans ce cas).

Prérequis :

  • HAProxy installé
  • Cerbot installé

Remarque : HAProxy et Certbot sont installés sur le même serveur dans cet exemple.

Installer Let's Encrypt SSL sur HAProxy

Configuration SSL HAProxy

HAProxy doit être configuré pour pouvoir acquérir le certificat SSL, c'est-à-dire transmettre les requêtes Certbot et appliquer le protocole HTTPS.

Un exemple de configuration ressemble à ceci :

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

Et nous allons parcourir la configuration et l'expliquer.

Nous avons d'abord défini l'interface 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

Pour cet exemple, sur le frontend, nous avons lié l'adresse IP publique et les ports 80 et 443 pour HTTP et HTTPS. L'adresse IP privée peut également être liée. Nous avons également défini

sur le port 443 bind où se trouve le certificat ssl situé sur notre machine serveur HAProxy et le nom de fichier du certificat ssl.

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

Cette commande force la redirection https tout le temps.

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

Ici, nous avons défini un nom pour nos serveurs principaux et demandé à Haproxy d'utiliser le serveur principal Let's encrypt, qui est également défini, s'il détecte le défi acme de Let's encrypt pour le nom de domaine.

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

Pour le côté backend, nous avons défini deux serveurs à titre d'exemple qui agiront comme des serveurs Web pour notre site de test, sur lesquels Haproxy peut suivre et équilibrer la charge du trafic.

En outre, Let's encrypt backend server est également défini, qui est le même serveur sur lequel nous avons installé Haproxy.

Acquérir le certificat SSL

Pour acquérir le certificat ssl de Let's encrypt alors que Haproxy est actif, exécutez l'une de ces deux commandes sur le serveur où Haproxy et Certbot sont installés :

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]

Essentiellement, les deux commandes font la même chose et vous pouvez essayer n'importe laquelle d'entre elles, nous venons d'ajouter dans le premier argument de commande avec l'adresse IP publique, si dans certains cas la deuxième commande ne fonctionne pas. Ainsi, dans les commandes, nous avons déclaré quel défi utiliser, quel port écouter, nous avons spécifié le nom de domaine pour lequel certbot demander un ssl, accepté le TOS et fourni une adresse e-mail.

Lorsque vous exécutez l'une de ces commandes, remplacez simplement example.com par le domaine pour lequel vous souhaitez obtenir le certificat ssl, remplacez l'adresse IP 123. par l'adresse IP de votre serveur et fournissez un e-mail légitime afin de recevoir les notifications de let's encrypt .

Même si nous avons acquis le certificat ssl et qu'il est valide, le Haproxy ne peut pas l'utiliser. Pour que Haproxy utilise le certificat ssl de Let's encrypt, le certificat ssl doit être enregistré dans un seul fichier. Haproxy exige que le certificat ssl soit dans un seul fichier.

Le certificat de Let's encrypt se présente sous la forme de trois fichiers distincts :la chaîne complète, la clé privée et le fichier de certificat. Pour que Haproxy utilise ssl et https, il suffit d'avoir une chaîne complète et une clé privée dans un seul fichier. Nous pouvons créer un seul fichier de certificat SSL et configurer plus tard Haproxy pour l'utiliser. Nous pouvons copier le contenu des fichiers de certificat et les copier dans le seul fichier .pem qui sera notre certificat ssl pour Haproxy.

Pour y parvenir, nous pouvons le faire avec une commande comme celle-ci :

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

Les fichiers de certificat Let’s encrypt se trouvent dans le répertoire let’s encrypt. Chaque certificat ssl est organisé dans un répertoire nommé comme un nom de domaine. Cette commande prend le contenu des certificats et les place dans un seul fichier. Ensuite, nous pouvons dire et configurer Haproxy pour utiliser ce fichier, comme dans la configuration ci-dessus. Bien sûr, remplacez example.com par votre nom de domaine et ajoutez dans la configuration Haproxy l'emplacement du fichier de certificat ssl que vous venez de créer comme dans la configuration au début de l'article.

Après cela et une fois ajouté dans le fichier de configuration Haproxy l'emplacement du certificat SSL à utiliser, redémarrez le service Haproxy :

sudo systemctl restart haproxy.service

Renouvellement automatique du certificat SSL HAProxy

Une chose à considérer lors de l'utilisation de ce type de configuration pour Haproxy pour utiliser le certificat SSL est qu'avec cette méthode, nous avons créé un fichier personnalisé pour utiliser le certificat et avec cette méthode, le certificat SSL ne sera pas renouvelé lorsqu'il expirera. Eh bien, le certbot renouvellera le certificat de Let's encrypt mais Haproxy ne pourra pas utiliser le nouveau certificat.

Cependant, nous pouvons toujours créer une configuration avec certbot et Haproxy pour également renouveler le certificat ssl pour Haproxy. Pour cela, nous devrons créer un script bash et configurer cerbot pour l'utiliser et l'exécuter avec un post-hook après que le certbot a renouvelé le certificat de Let's Encrypt. Let's Encrypt certbot par défaut a le renouvellement automatique activé et il a configuré une tâche cron quand exécuter un renouvellement. Par défaut, Let's Encrypt ssl dure 3 mois et cerbot renouvellera le certificat avant son expiration. Ainsi, notre configuration pour le renouvellement ssl pour Haproxy est, lorsque le certbot renouvelle le certificat ssl, il exécutera notre script bash post-hook, que nous avons créé et placé dans le répertoire post-hook, afin que Haproxy puisse utiliser le nouveau ssl certificat.

Un script bash ressemblerait à ceci :

#!/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

Il s'agit essentiellement des deux commandes que nous avons exécutées précédemment afin de créer le fichier de certificat SSL personnalisé à utiliser par Haproxy. Nous placerons ce script dans le répertoire Let’s encrypt post-hook de notre répertoire de configuration de nom de domaine. Comme dans l'image ci-dessous :

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

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

Vous pouvez créer le script et le coller avec ces commandes.

Ensuite, dans le fichier de configuration du domaine dans Let's Encrypt, ajoutez le paramètre post_hook pour exécuter le script bash que nous avons créé :

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

Ici, vous pouvez remarquer que nous avons utilisé l'outil sh pour exécuter notre script. C'est une façon de faire. Mais vous pouvez également rendre le script exécutable avec sudo chmod +x et cela fonctionnera également. Et ce fut la dernière étape. Nous l'avons fait.

Résumé

Nous avons couvert la procédure d'installation de Let's Encrypt SSL sur HAProxy et comment effectuer le renouvellement automatique pour haproxy avec let'sencrypt cerbot également. Au moins, une façon de le faire. Si vous avez besoin de plus d'informations pour comprendre le fonctionnement de HAProxy, vous pouvez consulter cet article où nous avons expliqué comment fonctionne haproxy et parcouru l'exemple de configuration, où nous avons expliqué la configuration en détail.

Merci beaucoup pour votre temps…


Linux
  1. Comment installer Let's Encrypt SSL pour NGINX sur Rocky Linux 8

  2. Comment installer Let's Encrypt SSL dans Apache sur Debian 11

  3. Comment installer Let's Encrypt SSL dans Nginx sur Debian 11

  4. Comment installer Let's Encrypt (Certbot) sur CentOS 8 ?

  5. Comment installer Let's Encrypt SSL sur Ubuntu 18.04 avec Nginx

Comment installer Let's Encrypt SSL en utilisant DirectAdmin

Comment installer Nginx avec Let's Encrypt SSL sur Fedora 35

Comment installer Let's Encrypt SSL sur Ubuntu avec Apache

Comment installer Let's Encrypt SSL pour Nginx sur Ubuntu 18.04 LTS

Comment installer Nginx avec Let's Encrypt SSL sur Ubuntu 20.04 LTS

Comment utiliser Let's Encrypt avec Cloudflare