GNU/Linux >> Linux Esercitazione >  >> Linux

Installa Let's Encrypt SSL su HAProxy

Panoramica

Esamineremo i passaggi per installare Let's Encrypt SSL su HAProxy. Oltre a installare e configurare haproxy con Let's encrypt certbot e acquisire SSL, tratteremo anche come rinnovare automaticamente il certificato. Le istruzioni scritte vengono eseguite su server GNU/Linux (Debian in questo caso).

Prerequisiti:

  • HAProxy installato
  • Installato Cerbot

Nota: HAProxy e Certbot sono installati sullo stesso server in questo esempio.

Installa Let's Encrypt SSL su HAProxy

Configurazione SSL HAProxy

HAProxy deve essere configurato per poter acquisire il certificato SSL, ovvero passare attraverso le richieste Certbot e applicare il protocollo HTTPS.

Un esempio della configurazione assomiglia a questo:

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

E analizzeremo la configurazione e la spiegheremo.

Per prima cosa abbiamo definito il frontend 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

Per questo esempio, sul frontend abbiamo associato l'indirizzo IP pubblico e le porte 80 e 443 per HTTP e HTTPS. L'indirizzo IP privato può anche essere vincolato. Abbiamo anche definito

su 443 port bind dove si trova il certificato SSL sulla nostra macchina server HAProxy e il nome file del certificato SSL.

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

Questo comando forza sempre il reindirizzamento https.

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

Qui abbiamo definito un nome per i nostri server back-end e abbiamo incaricato Haproxy di utilizzare Let's encrypt server back-end, che è anche definito, se rileva la sfida acme da Let's encrypt per il nome di 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

Per il lato back-end, abbiamo definito due server come esempio che fungeranno da server Web per il nostro sito di test, su cui Haproxy può tracciare e bilanciare il carico del traffico.

Inoltre, viene definito anche il server di backend Let's encrypt, che è lo stesso server su cui abbiamo installato Haproxy.

Acquisizione del certificato SSL

Per acquisire il certificato SSL da Let's encrypt mentre Haproxy è attivo, esegui uno di questi due comandi sul server dove sono installati Haproxy e 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]

In sostanza, entrambi i comandi fanno lo stesso e puoi provarne uno qualsiasi, abbiamo appena aggiunto nel primo argomento del comando l'indirizzo IP pubblico, se in qualche caso il secondo comando non funziona. Quindi, nei comandi abbiamo dichiarato quale challenge utilizzare, quale porta ascoltare, abbiamo specificato il nome di dominio per il quale certbot richiede un SSL, accettato TOS e fornito un indirizzo email.

Quando esegui uno di questi comandi, sostituisci semplicemente example.com con il tuo dominio per il quale desideri il certificato SSL, sostituisci l'indirizzo ip 123. con l'IP del tuo server e fornisci un'e-mail legittima per ricevere le notifiche da Let's encrypt .

Anche se abbiamo acquisito il certificato SSL ed è valido, Haproxy non può usarlo. Affinché Haproxy possa utilizzare il certificato SSL di Let's encrypt, il certificato SSL deve essere salvato in un unico file. Haproxy richiede che il certificato SSL sia in un unico file.

Il certificato di Let's encrypt viene fornito in tre file separati:fullchain, chiave privata e file cert. Affinché Haproxy utilizzi ssl e https, è sufficiente avere la catena completa e la chiave privata nel singolo file. Possiamo creare un singolo file di certificato SSL e successivamente configurare Haproxy per usarlo. Possiamo copiare i contenuti dai file del certificato e copiarli nel singolo file .pem che sarà il nostro certificato SSL per Haproxy.

Per ottenere ciò, possiamo farlo con un comando come questo:

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

I file Let's encrypt cert si trovano nella directory Let's encrypt. Ogni certificato SSL è organizzato in una directory denominata nome di dominio. Questo comando prende il contenuto dei certificati e li inserisce in un unico file. Quindi possiamo dire e configurare Haproxy per utilizzare questo file, come nella configurazione sopra. Ovviamente sostituisci example.com con il tuo nome di dominio e aggiungi nella configurazione Haproxy la posizione del file del certificato SSL che hai appena creato come nella configurazione all'inizio del post.

Fatto ciò e una volta aggiunto nel file di configurazione Haproxy il percorso del certificato SSL da utilizzare, riavviare il servizio Haproxy:

sudo systemctl restart haproxy.service

Rinnovo automatico del certificato SSL HAProxy

Una cosa da considerare quando si utilizza questo tipo di configurazione per Haproxy per utilizzare il certificato SSL è che con questo metodo abbiamo creato un file personalizzato per utilizzare il certificato e con questo metodo, il certificato SSL non verrà rinnovato alla scadenza. Bene, il certbot rinnoverà il certificato da Let's encrypt ma poi Haproxy non sarà in grado di utilizzare il nuovo certificato.

Tuttavia, possiamo ancora creare una configurazione con certbot e Haproxy per rinnovare anche il ceftificate SSL per Haproxy. Per questo, dovremo creare uno script bash e configurare cerbot per usarlo ed eseguirlo con un post-hook dopo che il certbot ha rinnovato il certificato da Let's Encrypt. Let's Encrypt certbot per impostazione predefinita ha il rinnovo automatico abilitato e ha configurato un processo cron quando eseguire un rinnovo. Per impostazione predefinita, Let's Encrypt ssl dura 3 mesi e cerbot rinnoverà il certificato prima della scadenza. Quindi, la nostra configurazione per il rinnovo SSL per Haproxy è che, quando il certbot rinnova il certificato SSL, eseguirà il nostro script bash post-hook, che abbiamo creato e inserito nella directory post-hook, in modo che Haproxy possa utilizzare il nuovo SSL certificato.

Uno script bash sarebbe simile a questo:

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

Questi sono essenzialmente i due comandi che abbiamo eseguito in precedenza per creare il file del certificato SSL personalizzato da utilizzare per Haproxy. Metteremo questo script nella directory Let's encrypt post-hook della nostra directory di configurazione del nome di dominio. Come nell'immagine qui sotto:

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

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

Puoi creare lo script e incollarlo con questi comandi.

Quindi, nel file di configurazione del dominio in Let's Encrypt, aggiungi il parametro post_hook per eseguire lo script bash che abbiamo creato:

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

Qui puoi notare che abbiamo usato lo strumento sh per eseguire il nostro script. Questo è un modo per farlo. Ma puoi anche rendere eseguibile lo script con sudo chmod +x e funzionerà ugualmente. E questo è stato l'ultimo passo. Ce l'abbiamo fatta.

Riepilogo

Abbiamo spiegato la procedura come installare Let's Encrypt SSL su HAProxy e come eseguire il rinnovo automatico per haproxy anche con let'sencrypt cerbot. Almeno, un modo per farlo. Se hai bisogno di maggiori informazioni per capire come funziona HAProxy, puoi controllare questo post in cui abbiamo spiegato come funziona haproxy e abbiamo esaminato la configurazione di esempio, dove abbiamo spiegato la configurazione in dettaglio.

Grazie mille per il tuo tempo...


Linux
  1. Come installare Let's Encrypt SSL per NGINX su Rocky Linux 8

  2. Come installare Let's Encrypt SSL in Apache su Debian 11

  3. Come installare Let's Encrypt SSL in Nginx su Debian 11

  4. Come installare Let's Encrypt (Certbot) su CentOS 8?

  5. Come installare Let's Encrypt SSL su Ubuntu 18.04 con Nginx

Come installare Let's Encrypt SSL usando DirectAdmin

Come installare Nginx con Let's Encrypt SSL su Fedora 35

Come installare Let's Encrypt SSL su Ubuntu con Apache

Come installare Let's Encrypt SSL per Nginx su Ubuntu 18.04 LTS

Come installare Nginx con Let's Encrypt SSL su Ubuntu 20.04 LTS

Come utilizzare Let's Encrypt con Cloudflare