GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Installieren Sie Let’s Encrypt SSL auf HAProxy

Übersicht

Wir werden die Schritte zur Installation von Let’s Encrypt SSL auf HAProxy durchgehen. Abgesehen von der Installation und Konfiguration von Haproxy mit Let’s encrypt certbot und dem Erwerb von SSL werden wir auch behandeln, wie das Zertifikat automatisch erneuert wird. Die schriftlichen Anweisungen werden auf GNU/Linux-Servern (in diesem Fall Debian) ausgeführt.

Voraussetzungen:

  • HAProxy installiert
  • Cerbot installiert

Hinweis: HAProxy und Certbot sind in diesem Beispiel auf demselben Server installiert.

Installieren Sie Let’s Encrypt SSL auf HAProxy

HAProxy-SSL-Konfiguration

HAProxy muss konfiguriert werden, um das SSL-Zertifikat erwerben zu können, d. h. um die Certbot-Anfragen weiterzuleiten und das HTTPS-Protokoll durchzusetzen.

Ein Beispiel für die Konfiguration sieht etwa so aus:

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

Und wir werden die Konfiguration durchgehen und erklären.

Zuerst haben wir das Haproxy-Frontend definiert:

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

Für dieses Beispiel haben wir am Frontend die öffentliche IP-Adresse und die Ports 80 und 443 für HTTP und HTTPS gebunden. Es kann auch eine private IP-Adresse gebunden werden. Wir haben auch

definiert

on 443 port bind wo sich das SSL-Zertifikat auf unserem HAProxy-Server befindet und der Dateiname des SSL-Zertifikats.

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

Dieser Befehl erzwingt ständig die https-Umleitung.

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

Hier haben wir einen Namen für unsere Backend-Server definiert und Haproxy angewiesen, den Backend-Server von Let’s encrypt zu verwenden, der ebenfalls definiert ist, wenn er die Acme-Challenge von Let’s encrypt für den Domainnamen erkennt.

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

Für die Backend-Seite haben wir als Beispiel zwei Server definiert, die als Webserver für unsere Testseite fungieren, auf die Haproxy den Datenverkehr verfolgen und ausgleichen kann.

Außerdem ist auch der Backend-Server von Let’s encrypt definiert, der derselbe Server ist, auf dem wir Haproxy installiert haben.

Erwerben des SSL-Zertifikats

Um das SSL-Zertifikat von Let’s encrypt zu erhalten, während Haproxy aktiv ist, führen Sie einen dieser beiden Befehle auf dem Server aus, auf dem Haproxy und Certbot installiert sind:

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]

Im Wesentlichen machen beide Befehle dasselbe und Sie können jeden von ihnen ausprobieren, wir haben nur das erste Befehlsargument mit der öffentlichen IP-Adresse hinzugefügt, falls der zweite Befehl in einigen Fällen nicht funktioniert. Also haben wir in den Befehlen deklariert, welche Herausforderung zu verwenden ist, welcher Port zu lauschen ist, wir haben den Domänennamen angegeben, für den certbot ein SSL anfordert, haben den TOS zugestimmt und eine E-Mail-Adresse angegeben.

Wenn Sie einen dieser Befehle ausführen, ersetzen Sie einfach example.com durch Ihre Domäne, für die Sie das SSL-Zertifikat wünschen, ersetzen Sie die 123. IP-Adresse durch die IP von Ihrem Server und geben Sie eine legitime E-Mail an, um die Benachrichtigungen von let's encrypt zu erhalten .

Obwohl wir das SSL-Zertifikat erworben haben und gültig sind, kann der Haproxy es nicht verwenden. Damit Haproxy das SSL-Zertifikat von Let’s encrypt verwenden kann, muss das SSL-Zertifikat in einer einzigen Datei gespeichert werden. Haproxy erfordert, dass sich das SSL-Zertifikat in einer einzigen Datei befindet.

Das Zertifikat von Let’s encrypt kommt in drei separaten Dateien – der Fullchain, dem privaten Schlüssel und der Zertifikatsdatei. Damit der Haproxy SSL und https verwenden kann, reicht es aus, die vollständige Kette und den privaten Schlüssel in einer einzigen Datei zu haben. Wir können eine einzelne SSL-Zertifikatsdatei erstellen und später Haproxy für die Verwendung konfigurieren. Wir können den Inhalt aus den Zertifikatsdateien kopieren und in die einzelne .pem-Datei kopieren, die unser SSL-Zertifikat für Haproxy sein wird.

Um dies zu erreichen, können wir dies mit einem Befehl wie diesem tun:

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

Die Zertifikatsdateien von Let’s encrypt befinden sich im Verzeichnis let’s encrypt. Jedes SSL-Zertifikat ist in einem Verzeichnis mit dem Namen eines Domänennamens organisiert. Dieser Befehl übernimmt den Inhalt der Zertifikate und legt sie in einer einzigen Datei ab. Dann können wir Haproxy sagen und konfigurieren, dass es diese Datei verwendet, wie in der Konfiguration von oben. Ersetzen Sie natürlich example.com durch Ihren Domainnamen und fügen Sie in der Haproxy-Konfiguration den Speicherort der SSL-Zertifikatsdatei hinzu, die Sie gerade erstellt haben, wie in der Konfiguration am Anfang des Beitrags.

Danach und sobald der Speicherort des zu verwendenden SSL-Zertifikats in der Haproxy-Konfigurationsdatei hinzugefügt wurde, starten Sie den Haproxy-Dienst neu:

sudo systemctl restart haproxy.service

Automatische Verlängerung des HAProxy-SSL-Zertifikats

Bei der Verwendung dieser Art von Setup für Haproxy zur Verwendung des SSL-Zertifikats ist zu beachten, dass wir bei dieser Methode eine benutzerdefinierte Datei zur Verwendung des Zertifikats erstellt haben und bei dieser Methode das SSL-Zertifikat nicht erneuert wird, wenn es abläuft. Nun, der Certbot erneuert das Zertifikat von Let’s encrypt, aber dann kann Haproxy das neue Zertifikat nicht verwenden.

Wir können jedoch immer noch ein Setup mit certbot und Haproxy erstellen, um auch das SSL-Zertifikat für Haproxy zu erneuern. Dazu müssen wir ein Bash-Skript erstellen und cerbot konfigurieren, um es zu verwenden, und es mit einem Post-Hook ausführen, nachdem der certbot das Zertifikat von Let’s Encrypt erneuert hat. Let’s Encrypt certbot hat standardmäßig die automatische Verlängerung aktiviert und einen Cron-Job konfiguriert, wenn eine Verlängerung ausgeführt werden soll. Standardmäßig dauert Let’s Encrypt SSL 3 Monate und cerbot erneuert das Zertifikat, bevor es abläuft. Unser Setup für die SSL-Erneuerung für Haproxy ist also, wenn der Certbot das SSL-Zertifikat erneuert, führt er unser Post-Hook-Bash-Skript aus, das wir erstellt und im Post-Hook-Verzeichnis abgelegt haben, damit Haproxy das neue SSL verwenden kann Zertifikat.

Ein Bash-Skript würde etwa so aussehen:

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

Dies sind im Wesentlichen die beiden Befehle von früher, die wir ausgeführt haben, um die benutzerdefinierte SSL-Zertifikatsdatei für Haproxy zu verwenden. Wir platzieren dieses Skript im Post-Hook-Verzeichnis von Let’s encrypt unseres Domänennamen-Konfigurationsverzeichnisses. Wie im Bild unten:

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

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

Mit diesen Befehlen können Sie das Skript erstellen und einfügen.

Fügen Sie dann in der Domänenkonfigurationsdatei in Let’s Encrypt den Parameter post_hook hinzu, um das von uns erstellte Bash-Skript auszuführen:

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

Hier sehen Sie, dass wir das sh-Tool verwendet haben, um unser Skript auszuführen. Das ist eine Möglichkeit, es zu tun. Sie können das Skript aber auch mit sudo chmod +x ausführbar machen und es wird auch funktionieren. Und das war der letzte Schritt. Wir haben es geschafft.

Zusammenfassung

Wir haben das Verfahren zur Installation von Let’s Encrypt SSL auf HAProxy und zur Durchführung der automatischen Verlängerung für Haproxy auch mit let’sencrypt cerbot behandelt. Zumindest eine Möglichkeit, wie es geht. Wenn Sie weitere Informationen benötigen, um zu verstehen, wie HAProxy funktioniert, können Sie diesen Beitrag lesen, in dem wir erklärt haben, wie HAProxy funktioniert, und die Beispielkonfiguration durchgegangen sind, in der wir die Konfiguration im Detail erklärt haben.

Vielen Dank für Ihre Zeit…


Linux
  1. So installieren Sie Let’s Encrypt SSL für NGINX unter Rocky Linux 8

  2. So installieren Sie Let’s Encrypt SSL in Apache unter Debian 11

  3. So installieren Sie Let’s Encrypt SSL in Nginx unter Debian 11

  4. Wie installiere ich Let’s Encrypt (Certbot) auf CentOS 8?

  5. So installieren Sie Let’s Encrypt SSL auf Ubuntu 18.04 mit Nginx

So installieren Sie Let’s Encrypt SSL mit DirectAdmin

So installieren Sie Nginx mit Let’s Encrypt SSL auf Fedora 35

So installieren Sie Let’s Encrypt SSL auf Ubuntu mit Apache

So installieren Sie Let’s Encrypt SSL für Nginx unter Ubuntu 18.04 LTS

So installieren Sie Nginx mit Let’s Encrypt SSL unter Ubuntu 20.04 LTS

So verwenden Sie Let’s Encrypt mit Cloudflare