La maggior parte dei server Web come nginx e apache ascoltano sulla porta 80 per impostazione predefinita e richiedono un po' di configurazione prima di iniziare a utilizzare i certificati per crittografare il traffico. Nonostante sia configurato, il server web può ancora servire il traffico HTTP senza problemi. Quindi i visitatori del tuo sito web digiteranno semplicemente http://example.com invece di https://example.com e l'intero traffico rimarrà non crittografato per loro. Per aggirare questo problema, dobbiamo configurare i server HTTP in modo che reindirizzino essi stessi tutto l'HTTP a HTTPS.
La configurazione che ho utilizza un FQDN con un IP pubblico, quindi emetterò un certificato SSL da LetsEncrypt anziché emetterne uno autofirmato. A seconda del tipo di server web che stai utilizzando, puoi farlo in diversi modi. Ma il flusso generale è così:
- Ottieni un certificato firmato da una CA. Nel nostro caso questo sarà LetsEncrypt
- Configurare il server Web per utilizzare la chiave di crittografia per crittografare il traffico HTTP in uscita sulla porta 443. Questa è la porta HTTPS predefinita.
- Reindirizza tutte le richieste in entrata sulla porta 80 (che è HTTP non crittografato) alla porta 443, abilitando così le sessioni crittografate per tutte le connessioni in entrata.
Dimostriamo vari modi per ottenere ciò che vogliamo. La prima è la soluzione più semplice che utilizza Certbot.
1. Il modo più semplice: utilizzare i plug-in Certbot per Nginx o Apache
Userò Nginx come esempio per questo server. Se ne stai utilizzando uno diverso, come Apache o HAProxy, visita la pagina ufficiale di Certbot e seleziona il tuo sistema operativo e il tuo server web preferito. Per Nginx su Ubuntu 18.04, questi sono i comandi di cui avresti bisogno.
Innanzitutto, aggiorna il tuo indice dei repository re.
$ sudo apt-get update$ sudo apt-get install software-properties-common
Dovresti aggiungere i repository di terze parti richiesti, che Ubuntu potrebbe non aver abilitato per impostazione predefinita.
$ sudo add-apt-repository universo$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
E poi installa il pacchetto certbot con i plugin Nginx, usando il comando qui sotto.
$ sudo apt-get install certbot python-certbot-nginxLe istruzioni saranno diverse per le diverse piattaforme e installeranno i plug-in per il server Web, se disponibili. Il motivo per cui i plugin ci semplificano la vita è perché possono modificare automaticamente i file di configurazione sul server web per reindirizzare anche il traffico. Lo svantaggio potrebbe essere che se stai eseguendo un server molto personalizzato per un sito Web preesistente, il plug-in potrebbe interrompere alcune cose al suo interno.
Per nuovi siti Web o configurazioni molto semplici, come un proxy inverso, il plug-in funziona sorprendentemente bene. Per ottenere i certificati e reindirizzare il traffico, esegui semplicemente il comando seguente e segui le varie opzioni interattive mentre il pacchetto ti guida attraverso di esse.
$ sudo certbot --nginxProduzione:
certbot --nginxSalvataggio del log di debug in /var/log/letsencrypt/letsencrypt.log
Plugin selezionati: Authenticator nginx, Installer nginx
Inserisci l'indirizzo e-mail (utilizzato per rinnovi urgenti e avvisi di sicurezza) (Inserisci 'c' t
annulla): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Si prega di leggere i Termini di servizio su
https://letsencrypt.org/documenti/LE-SA-v1.2-novembre-15-2017.PDF. Devi
acconsentire per registrarsi al server ACME su
https://acme-v02.api.crittografa.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(La)concordo/(C)annullo: LA
…
Nessun nome trovato nei tuoi file di configurazione. Per favore entra nel tuo dominio
nome(i) (separati da virgole e/o spazi) (Inserisci "c" per annullare): SOTTODOMINIO.NOME DEL DOMINIO.TLD
…
Scegli se reindirizzare o meno il traffico HTTP a HTTPS, rimuovendo l'accesso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Nessun reindirizzamento - Non apportare ulteriori modifiche alla configurazione del server web.
2: Reindirizzamento: reindirizza tutte le richieste all'accesso HTTPS protetto. Scegli questo per
nuovi siti o se sei sicuro che il tuo sito funzioni su HTTPS. Puoi annullare questo
cambia modificando la configurazione del tuo server web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Selezionare il numero appropriato [1-2] quindi [invio] (premere 'c' per annullare): 2
Reindirizzare tutto il traffico sulla porta 80 su ssl in /etc/nginx/sites-enabled/default
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulazioni! Hai abilitato con successo https://SUBDOMAIN.NOME DEL DOMINIO.TLD
Dovresti testare la tua configurazione su:
https://www.ssllabs.com/ssltest/analyze.html?d=SOTTODOMINIO.NOME DEL DOMINIO.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NOTE IMPORTANTI:
- Congratulazioni! Il tuo certificato e la tua catena sono stati salvati in:
Il tuo file chiave è stato salvato in:
/etc/letsencrypt/live/SOTTODOMINIO.NOME DEL DOMINIO.TLD/chiave privata.pemCome mostrato nell'esempio sopra, devi solo fornire un indirizzo email valido e il tuo nome di dominio per ottenere il certificato. Questo certificato è archiviato in /etc/letsencrypt/live/SOTTODOMINIO.NOME DEL DOMINIO.TLD
. L'ultima directory prenderà il nome dal tuo FQDN.
L'aspetto più importante è selezionare l'opzione Reindirizza e farà il lavoro di reindirizzare tutto il traffico HTTP a HTTPS. Se sei curioso di sapere quali sono queste modifiche, puoi ispezionare i file di configurazione in /etc/nginx/
per capirne l'essenza.
2. Modificare i file di configurazione
Se vuoi configurare manualmente il tuo server per utilizzare i certificati. Per ottenere i certificati utilizzando certbot, eseguire:
$ sudo certbot certonlyCome prima, i certificati vengono salvati nella directory /etc/letsencrypt/live/nomedominio.com/
Ora possiamo configurare Nginx per utilizzare i file in questa directory. Per prima cosa, mi sbarazzerò del layout di directory specifico di Debian. Il file di configurazione del sito della pagina predefinita è /etc/nginx/sites-available/default
sottodirectory con un collegamento simbolico a /etc/nginx/site-enabled
.
Eliminerò semplicemente il collegamento simbolico e sposterò il file di configurazione in /etc/nginx/conf.d con a .conf solo per mantenere le cose più generalizzate e applicabili anche ad altre distro.
$ sudo rm /etc/sites-enabled/default$ sudo mv /etc/nginx/sites-available/default /etc/nginx/conf.d/predefinito.conf
$ sudo service nginx restart
Modificherò questo file di configurazione predefinito per dimostrare come è abilitato TLS.
Di seguito sono riportati i contenuti all'interno del file di configurazione predefinito, senza le sezioni commentate. Le sezioni evidenziate sono quelle che dovresti aggiungere alla configurazione del tuo server per abilitare TLS e l'ultimo blocco in questo file di configurazione rileva se lo schema utilizza TLS o meno. Se TLS non viene utilizzato, restituisce semplicemente un codice di reindirizzamento 301 al client e modifica l'URL per utilizzare invece https. In questo modo, non ti perderai gli utenti
serverascolta 80 default_server;
ascolta [::]:80 default_server;
ascolta 443 ssl;
ssl_certificate /etc/letsencrypt/live/SUBDOMAIN.DOMINIO.TLS/intera catena.pem;
ssl_certificate_key /etc/letsencrypt/live/SOTTODOMINIO.DOMINIO.TLD/chiave privata.pem;
ssl_session_cache shared:le_nginx_SSL:1m;
ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers attivo;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-
ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256
-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256
-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128
-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE
-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE
-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3
-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256
-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";
radice /var/www/html;
indice indice.indice html.indice htm.nginx-debian.html;
nome del server _;
Posizione /
try_files $uri $uri/ =404;
if ($schema != "https")
restituisce 301 https://$host$request_uri;
Ci sono alcuni parametri extra aggiunti a questo file di configurazione. Compresi i parametri che dichiarano il timeout, la versione TLS che dovresti usare e quali cifrari di crittografia utilizzerà il server. Questo è stato preso in prestito dalle configurazioni consigliate (ma facoltative) di Certbot per Nginx.
Ora controlla se il file di configurazione è valido e riavvia il server.
$ sudo nginx -tnginx: il file di configurazione /etc/nginx/nginx.la sintassi conf è ok
nginx: file di configurazione /etc/nginx/nginx.conf il test ha esito positivo
$ sudo service nginx restart
Conclusione
Puoi applicare lo stesso approccio per app Web e servizi più complicati che richiedono HTTPS. Letsencrypt ti consente di emettere certificati per più nomi di dominio contemporaneamente e puoi ospitare più siti Web dietro il tuo server web nginx abbastanza facilmente. Se hai seguito l'esempio sopra, prova a raggiungere il tuo sito web utilizzando http (http://SUBDOMAIN.DOMINIO.TLD) e verrai reindirizzato automaticamente a HTTPS.
Per altri server web, come Apache, usa il plugin certbot appropriato o fai riferimento alla loro documentazione ufficiale.