Questo articolo ti guiderà attraverso la configurazione della terminazione SSL su HAProxy, per crittografare il traffico su HTTPS. Useremo un certificato SSL autofirmato per il nuovo frontend. Si presume che HAProxy sia già installato e configurato con un frontend HTTP standard.
Requisiti
- Vultr VPS
- HAProxy 1.5
- Ubuntu 14.04 LTS (dovrebbe funzionare su altre versioni e distribuzioni)
Genera certificato e chiave privata
Eseguire le seguenti righe di codice per generare una chiave privata e un certificato autofirmato che funzionerà con HAProxy.
openssl genrsa -out /etc/ssl/private/server.key 2048
mkdir /etc/ssl/csr
openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/csr/server.csr
openssl x509 -req -days 365 -in /etc/ssl/csr/server.csr -signkey /etc/ssl/private/server.key -out /etc/ssl/certs/server.crt
cat /etc/ssl/certs/server.crt /etc/ssl/private/server.key > /etc/ssl/certs/server.bundle.pem
La prima cosa da fare è assicurarsi che SSLv3 sia disabilitato. A causa dell'attacco POODLE, SSLv3 non è più considerato sicuro. Tutte le applicazioni e i server devono utilizzare TLS 1.0 e versioni successive. Utilizzando il tuo editor di testo preferito, apri il file /etc/haproxy/haproxy.cfg
. All'interno, cerca la linea ssl-default-bind-options no-sslv3
sotto la global
sezione. Se non lo vedi, aggiungi quella riga alla fine della sezione prima della defaults
sezione. Ciò assicurerà che SSLv3 sia disabilitato a livello globale. Puoi anche impostarlo all'interno delle sezioni del tuo frontend, ma è consigliabile disabilitarlo a livello globale.
Sulla configurazione HTTPS. Crea una nuova sezione di frontend denominata web-https
.
frontend web-https
bind public_ip:443 ssl crt /etc/ssl/certs/server.bundle.pem
reqadd X-Forwarded-Proto:\ https
rspadd Strict-Transport-Security:\ max-age=31536000
default_backend www-backend
Spiegare:
bind public_ip:443
( public_ip
passa al tuo IP pubblico VPS) dice a HAProxy di ascoltare qualsiasi richiesta inviata all'indirizzo IP sulla porta 443
(la porta HTTPS).
ssl crt /etc/ssl/certs/server.bundle.pem
dice a HAProxy di utilizzare il certificato SSL precedentemente generato.
reqadd X-Forwarded-Proto:\ https
aggiunge l'intestazione HTTPS alla fine della richiesta in arrivo.
rspadd Strict-Transport-Security:\ max-age=31536000
una politica di sicurezza per prevenire attacchi di downgrade.
Non è necessario apportare ulteriori modifiche alla sezione back-end.
Se si desidera che HAProxy utilizzi HTTPS per impostazione predefinita, aggiungere redirect scheme https if !{ ssl_fc }
all'inizio della www-backend
sezione. Questo forzerà il reindirizzamento HTTPS.
Salvare la configurazione ed eseguire service haproxy restart
per riavviare HAPRoxy. Ora sei pronto per usare HAProxy con un endpoint SSL.