HTTP

Reindirizzamento da HTTP a HTTPS

Reindirizzamento da HTTP a HTTPS
Sia che tu stia utilizzando certificati autofirmati o certificati da una CA ben nota, hai bisogno di un modo per integrarlo con i tuoi servizi. Uno dei casi d'uso più tipici quello di un server HTTP, potrebbe essere un server Web o un server API REST ma deve essere configurato per essere sicuro.

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ì:

  1. Ottieni un certificato firmato da una CA. Nel nostro caso questo sarà LetsEncrypt
  2. 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.
  3. 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-nginx

Le 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 --nginx

Produzione:

certbot --nginx
Salvataggio 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:

/etc/letsencrypt/live/SOTTODOMINIO.NOME DEL DOMINIO.TLD/intera catena.pem

Il tuo file chiave è stato salvato in:

/etc/letsencrypt/live/SOTTODOMINIO.NOME DEL DOMINIO.TLD/chiave privata.pem

Come 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 certonly

Come 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

server
ascolta 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 -t
nginx: 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.

Vulkan per utenti Linux
Con ogni nuova generazione di schede grafiche, vediamo gli sviluppatori di giochi spingere i limiti della fedeltà grafica e avvicinarsi di un passo al...
OpenTTD vs Simutrans
Creare la tua simulazione di trasporto può essere divertente, rilassante ed estremamente allettante. Ecco perché devi assicurarti di provare quanti pi...
Tutorial OpenTTD
OpenTTD è uno dei giochi di simulazione aziendale più popolari in circolazione. In questo gioco, devi creare una meravigliosa attività di trasporto. T...