Přehled
Projdeme si kroky, jak nainstalovat Let's Encrypt SSL na HAProxy. Kromě instalace a konfigurace haproxy pomocí Let’s encrypt certbot a získání ssl se také podíváme na to, jak automaticky obnovit certifikát. Písemné instrukce jsou prováděny na serverech GNU/Linux (v tomto případě Debian).
Předpoklady:
- HAProxy nainstalováno
- Cerbot nainstalován
Poznámka: HAProxy a Certbot jsou v tomto příkladu nainstalovány na stejném serveru.
Nainstalujte Let's Encrypt SSL na HAProxy
Konfigurace HAProxy SSL
HAProxy je třeba nakonfigurovat, aby bylo možné získat certifikát SSL, což znamená procházet požadavky Certbot a vynucovat protokol HTTPS.
Jeden příklad konfigurace vypadá asi takto:
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
A my projdeme konfiguraci a vysvětlíme ji.
Nejprve jsme definovali haproxy frontend:
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
Pro tento příklad jsme na frontendu svázali veřejnou IP adresu a porty 80 a 443 pro HTTP a HTTPS. Soukromá IP adresa může být také svázána. Také jsme definovali
na vazbě portu 443, kde je certifikát ssl umístěn na našem serveru HAProxy a název souboru certifikátu ssl.
# HTTPS redirect redirect scheme https code 301 if !{ ssl_fc }
Tento příkaz neustále vynucuje přesměrování https.
mode http default_backend test_site acl letsencrypt-acl path_beg /.well-known/acme-challenge/ use_backend letsencrypt-backend if letsencrypt-acl
Zde jsme definovali název pro naše backend servery a instruovali Haproxy, aby použila backend server Let’s encrypt, který je také definován, pokud zjistí výzvu acme z Let’s encrypt pro název domény.
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.
Pro backendovou stranu jsme jako příklad definovali dva servery, které budou fungovat jako webové servery pro náš testovací web, na kterém může Haproxy sledovat a vyvažovat zatížení.
Také je definován backend server Let’s encrypt, což je stejný server, na který jsme nainstalovali Haproxy.
Získání certifikátu SSL
Chcete-li získat certifikát ssl z Let’s encrypt, když je Haproxy aktivní, spusťte jeden z těchto dvou příkazů na serveru, kde jsou nainstalovány Haproxy a 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]
V podstatě oba příkazy dělají totéž a můžete vyzkoušet kterýkoli z nich, jen jsme do prvního příkazu přidali argument s veřejnou IP adresou, pokud by v některém případě druhý příkaz nefungoval. Takže v příkazech, které jsme deklarovali, jakou výzvu použít, který port naslouchat, jsme specifikovali název domény, pro který certbot požaduje ssl, souhlasili s TOS a poskytli e-mailovou adresu.
Když spustíte jeden z těchto příkazů, stačí nahradit example.com svou doménou, pro kterou chcete certifikát ssl, nahradit 123. ip adresu IP z vašeho serveru a poskytnout legitimní e-mail, abyste mohli dostávat oznámení z let's encrypt .
Přestože jsme získali ssl certifikát a je platný, Haproxy jej nemůže použít. Aby Haproxy mohl používat ssl certifikát z Let’s encrypt, musí být ssl certifikát uložen v jednom souboru. Haproxy vyžaduje, aby byl ssl certifikát v jednom souboru.
Certifikát od Let’s encrypt je dodáván ve třech samostatných souborech – fullchain, soukromý klíč a soubor certifikátu. Aby Haproxy používal ssl a https, stačí mít celý řetězec a soukromý klíč v jediném souboru. Můžeme vytvořit jeden soubor ssl certifikátu a později nakonfigurovat Haproxy, aby jej používal. Můžeme zkopírovat obsah ze souborů certifikátů a zkopírovat je do jediného souboru .pem, který bude naším ssl certifikátem pro Haproxy.
Abychom toho dosáhli, můžeme to udělat příkazem jako je tento:
sudo cat "/etc/letsencrypt/live/example.com/fullchain.pem" "/etc/letsencrypt/live/example.com/privkey.pem" > "/etc/ssl/example.com.pem"
Soubory Let’s encrypt cert se nacházejí v adresáři let’s encrypt. Každý certifikát ssl je uspořádán v adresáři pojmenovaném jako název domény. Tento příkaz převezme obsah certifikátů a umístí je do jednoho souboru. Pak můžeme říct a nakonfigurovat Haproxy, aby používala tento soubor, jako v konfiguraci shora. Samozřejmě nahraďte example.com svým názvem domény a přidejte do konfigurace Haproxy umístění souboru ssl certifikátu, který jste právě vytvořili, jako v konfiguraci na začátku příspěvku.
Poté a jakmile do konfiguračního souboru Haproxy přidáte umístění certifikátu SSL, který chcete použít, restartujte službu Haproxy:
sudo systemctl restart haproxy.service
Automatické obnovení certifikátu SSL HAProxy
Jedna věc, kterou je třeba vzít v úvahu při použití tohoto typu nastavení pro Haproxy pro použití certifikátu SSL, je, že pomocí této metody jsme vytvořili vlastní soubor pro použití certifikátu a pomocí této metody nebude certifikát SSL po vypršení platnosti obnoven. No, certbot obnoví certifikát z Let’s encrypt, ale pak Haproxy nebude moci nový certifikát použít.
Stále však můžeme vytvořit nastavení s certbotem a Haproxy, abychom také obnovili ssl ceftificate pro Haproxy. Za tímto účelem budeme muset vytvořit bash skript a nakonfigurovat cerbot, aby jej používal, a spustit jej s post-hook poté, co certbot obnoví certifikát z Let’s Encrypt. Let’s Encrypt certbot má ve výchozím nastavení povoleno automatické obnovení a nakonfiguroval úlohu cron, kdy se má obnovení spustit. Ve výchozím nastavení trvá Let’s Encrypt ssl 3 měsíce a cerbot certifikát před vypršením platnosti obnoví. Naše nastavení pro obnovení ssl pro Haproxy je tedy takové, že když certbot obnoví certifikát ssl, spustí náš post-hook bash skript, který jsme vytvořili a umístili ho do adresáře post-hook, aby Haproxy mohl používat nový ssl certifikát.
Bash skript by vypadal nějak takto:
#!/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
Toto jsou v podstatě dva příkazy z dříve, které jsme spustili, abychom vytvořili vlastní soubor certifikátu ssl pro použití Haproxy. Tento skript umístíme do adresáře Let's encrypt post-hook v našem konfiguračním adresáři názvu domény. Jako na obrázku níže:
sudo touch /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh sudo nano /etc/letsencrypt/renewal-hooks/post/haproxy-ssl-renew.sh
Pomocí těchto příkazů můžete vytvořit skript a vložit jej do něj.
Poté do konfiguračního souboru domény v Let’s Encrypt přidejte parametr post_hook, aby se spustil skript bash, který jsme vytvořili:
sudo nano /etc/letsencrypt/renewal/example.com.conf
Zde si můžete všimnout, že ke spuštění našeho skriptu jsme použili nástroj sh. To je jeden způsob, jak to udělat. Skript ale můžete také nastavit jako spustitelný pomocí sudo chmod +x a bude fungovat také. A tohle byl poslední krok. Dokázali jsme to.
Shrnutí
Probrali jsme postup, jak nainstalovat Let’s Encrypt SSL na HAProxy a jak provést automatické obnovení pro haproxy také pomocí let’sencrypt cerbot. Alespoň jeden způsob, jak to udělat. Pokud potřebujete více informací, abyste pochopili, jak HAProxy funguje, můžete se podívat na tento příspěvek, kde jsme vysvětlili, jak HAProxy funguje, a prošli si ukázkovou konfiguraci, kde jsme konfiguraci podrobně vysvětlili.
Velice vám děkuji za váš čas…