HTTPS è appena diventato più veloce e sicuro grazie al rilascio di TLS 1.3 da parte di IETF (RFC 8446) nell'agosto 2018. TLS 1.3 è ora l'ultima versione del protocollo TLS. Questo tutorial ti mostrerà come abilitare TLS 1.3 nel server web Nginx su Ubuntu 18.04 e Ubuntu 16.04.
Aggiorna :C'è un modo più semplice per abilitare TLS 1.3. Vedi questo articolo:Come abilitare facilmente TLS 1.3 in Nginx su Ubuntu 18.10, 18.04, 16.04, 14.04
TLS 1.3:prestazioni e sicurezza migliorate
Per quanto riguarda le prestazioni, TLS 1.2 necessita di due round trip per stabilire una connessione HTTPS. Con TLS 1.3 è richiesto un solo viaggio di andata e ritorno. TLS 1.3 supporta anche la modalità di andata e ritorno zero (ripresa della sessione 0-RTT), consentendo ai client che si sono precedentemente collegati al tuo sito Web di inviare una richiesta HTTP sul primo messaggio al server. Questo fa una grande differenza per gli utenti su reti mobili o in località lontane.
In termini di sicurezza, TLS 1.3 ha rimosso il supporto per le vecchie suite di crittografia, responsabile di exploit come l'attacco ROBOT. Poiché tali amministratori del server non possono più aggiungere vecchie suite di crittografia in TLS 1.3 per placare gli utenti dei vecchi browser Web. Questa, ovviamente, è una spiegazione troppo semplificata. CloudFlare ha una buona spiegazione dettagliata di TLS 1.3.
Abilita TLS 1.3 in Nginx su Ubuntu 18.04, Ubuntu 16.04
Ci sono due requisiti quando si tratta di abilitare TLS 1.3 con Nginx.
- La tua versione di Nginx deve supportare TLS 1.3. Ciò significa nginx 1.13 o versioni successive.
- Nginx deve essere compilato con OpenSSL 1.1.1+ o deve essere eseguito con OpenSSL 1.1.1+.
Il secondo requisito può sembrare confuso, quindi lascia che ti faccia due esempi.
- Ubuntu 18.04 viene fornito con OpenSSL 1.1.0. Sostituire la libreria OpenSSL di sistema non è una buona idea, ma puoi scaricare il codice sorgente di OpenSSL 1.1.1 e compilare Nginx con il codice sorgente di OpenSSL 1.1.1 per abilitare TLS 1.3.
- Arch Linux viene attualmente fornito con OpenSSL 1.1.1, ma il pacchetto Nginx nel repository Arch è in realtà compilato con OpenSSL 1.1.0. In questo caso, Nginx non è compilato con OpenSSL 1.1.1, ma funziona con OpenSSL 1.1.1.
Ora vediamo come compilare Nginx con OpenSSL 1.1.1 su Ubuntu 18.04 e Ubuntu 16.04.
1. Aggiunta del repository Nginx ufficiale
Invece di scaricare il tarball sorgente e compilarlo con make
, aggiungerò il repository Nginx ufficiale al mio server Ubuntu e quindi creerò un pacchetto deb dal codice sorgente. In questo modo, non ho bisogno di aggiungere manualmente un lungo elenco di parametri di configurazione a configure
comando. Inoltre ci sarà un pratico file di servizio systemd all'interno del pacchetto deb.
Per prima cosa recupera la chiave GPG di Nginx e importala su Ubuntu.
wget http://nginx.org/keys/nginx_signing.key sudo apt-key add nginx_signing.key
Quindi crea un file di elenco di origine per il repository Nginx.
sudo nano /etc/apt/sources.list.d/nginx.list
Aggiungi le seguenti due righe nel file. Il deb-src
line ci consente di scaricare i pacchetti sorgente Nginx con apt source
comando. Bonic
è il nome in codice di Ubuntu 18.04. Se stai usando Ubuntu 16.04, sostituiscilo con xenial
. (Nota:questo repository non supporta il sistema operativo a 32 bit.)
deb [arch=amd64] http://nginx.org/packages/mainline/ubuntu/ bionic nginx deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx
Per salvare un file nell'editor di testo Nano, premi Ctrl+O
, quindi premere Invio per confermare. Per uscire, premi Ctrl+X
. Quindi aggiorna l'indice del pacchetto locale.
sudo apt update
Ora il repository ufficiale di Nginx è stato aggiunto al server Ubuntu.
2. Scarica Nginx e codice sorgente OpenSSL
Creeremo un nginx
directory in /usr/local/src/
per memorizzare i sorgenti Nginx e poi cd
in quella directory.
sudo mkdir /usr/local/src/nginx cd /usr/local/src/nginx/
Scarica il pacchetto sorgente Nginx con il comando seguente:
sudo apt install dpkg-dev sudo apt source nginx
Dai un'occhiata ai file scaricati.
ls
Uscita:
nginx-1.15.3 nginx_1.15.3-1~bionic.dsc nginx_1.15.3-1~bionic.debian.tar.xz nginx_1.15.3.orig.tar.gz
Quindi clona il repository github di OpenSSL.
cd /usr/local/src sudo apt install git sudo git clone https://github.com/openssl/openssl.git cd openssl
Quindi, elenca tutti i rami e passa al ramo stabile 1.1.1.
git branch -a sudo git checkout OpenSSL_1_1_1-stable
3. Modifica le regole di compilazione Nginx
Modifica il file delle regole di compilazione Nginx.
sudo nano /usr/local/src/nginx/nginx-1.15.3/debian/rules
Trova config.status.nginx: config.env.nginx
sezione. Aggiungi il testo seguente alla fine della riga CFLAGS. Nota che il testo seguente non è una riga di per sé.
--with-openssl=/usr/local/src/openssl
Salva e chiudi il file.
4. Compila Nginx
Assicurati di essere nella directory di origine di Nginx.
cd /usr/local/src/nginx/nginx-1.15.3/
Installa le dipendenze per creare il nostro pacchetto deb Nginx.
sudo apt build-dep nginx
Ora usa il seguente comando per compilare il pacchetto deb.
sudo dpkg-buildpackage -b
Se vedi il seguente errore,
missing initializer for field 'md_ctrl' of 'EVP_MD {aka const struct evp_md_st}
Quindi modifica auto/cc/gcc
file.
sudo nano /usr/local/src/nginx/nginx-1.15.3/auto/cc/gcc
Commenta la riga seguente. Il -Werror
flag fa in modo che GCC consideri gli avvisi come errori.
CFLAGS="$CFLAGS -Werror"
Quindi eseguire nuovamente il comando build. Una volta completata la build, ci sarà un pacchetto deb Nginx in /usr/local/src/nginx/
directory. Se hai già installato Nginx, è ora di rimuovere la vecchia versione e quindi installare la nuova versione.
sudo apt remove nginx nginx-common nginx-full cd /usr/local/src/nginx/ sudo dpkg -i nginx_1.15.3-1~bionic_amd64.deb
Ora iniziamo Nginx.
sudo systemctl start nginx
Se viene visualizzato il seguente messaggio di errore.
Failed to start nginx.service: Unit nginx.service is masked.
Quindi smaschera nginx ed emetti di nuovo il comando di avvio.
sudo systemctl unmask nginx
Tieni presente che il processo Nginx potrebbe essere eseguito come utente nginx
o www-data
. Questo può essere modificato modificando la prima riga in /etc/nginx/nginx.conf
file. Assicurati solo che Nginx funzioni come lo stesso utente con PHP-FPM.
Ora controlla gli argomenti di configurazione di Nginx.
sudo nginx -V
Come puoi vedere, abbiamo l'ultima versione di Nginx costruita con OpenSSL 1.1.1.
5. Abilita TLS 1.3 in Nginx Server Block
Ora presumo che tu abbia già abilitato HTTPS per il tuo blocco server Nginx. La sintassi per abilitare TLS 1.3 è abbastanza semplice. Apri il tuo file di blocco del server Nginx in /etc/nginx/conf.d/
directory o /etc/nginx/sites-enabled/
directory. Trova la riga seguente.
ssl_protocols TLSv1.2;
Aggiungi TLSv1.3
all'elenco dei protocolli.
ssl_protocols TLSv1.2 TLSv1.3;
Quindi aggiungi le seguenti 3 suite di crittografia alle suite di crittografia esistenti.
TLS-CHACHA20-POLY1305-SHA256 TLS-AES-256-GCM-SHA384 TLS-AES-128-GCM-SHA256
così:
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
Salva e chiudi il file. Quindi prova la configurazione di Nginx e ricarica.
sudo nginx -t sudo systemctl reload nginx
È improbabile che Ubuntu 18.04 passi a OpenSSL 1.1.1, quindi se aggiorni Nginx con sudo apt upgrade
comando, TLS 1.3 non sarà più disponibile. È una buona idea impedire che Nginx venga aggiornato da apt
con questo comando:
sudo apt-mark hold nginx
Aggiornamento:a partire da Nginx 1.15.4, puoi abilitare 0-RTT con OpenSSL aggiungendo la seguente direttiva nel contesto del server SSL. Il valore predefinito è impostato su off
. Nella versione precedente 1.15.3, può essere utilizzato solo con BoringSSL.
ssl_early_data on
Abilita TLS 1.3 in Google Chrome
Attualmente, Firefox 62 e Chrome 69 supportano solo la bozza 28 di TLS 1.3. OpenSSL 1.1.1 supporta la versione finale di TLS 1.3. Le implementazioni basate sulla versione bozza e sulla versione RFC finale non interagiscono tra loro.
Per testare ora il nostro server Nginx, dobbiamo installare la versione beta di Google Chrome e abilitare la versione finale di TLS 1.3. Dopo aver installato Chrome beta, inserisci chrome://flags/#tls13-variant
nella barra degli indirizzi e passare da default
su Enabled (Final)
. Quindi riavvia Google Chrome per rendere effettive le modifiche.
Ora visita il tuo sito web abilitato per TLS 1.3 in Google Chrome beta e premi Ctrl+Shift+I
per aprire la pagina degli strumenti per sviluppatori. Vai a Security
scheda. Puoi vedere la versione di TLS in uso.
Si dice che Firefox fornisca la versione finale di TLS 1.3 in Firefox 63, prevista per ottobre 2018. In Chrome 70, la versione finale di TLS 1.3 sarà abilitata per le connessioni in uscita.
Aggiornamento:Chrome 70 ha aggiunto il supporto per la versione finale di TLS 1.3, ma per impostazione predefinita utilizza ancora la bozza 28 di TLS 1.3.Abilita TLS 1.3 con CloudFlare
Se stai utilizzando CloudFlare CDN (Content Delivery Network), il tuo sito Web sta già utilizzando TLS1.3. Nella dashboard di CloudFlare, seleziona il crypto
scheda e vedrai l'opzione per abilitare/disabilitare TLS 1.3. Puoi anche abilitare 0-RTT. CloudFlare supporta sia la versione bozza 28 che la versione finale.
Questo è tutto! Spero che questo tutorial ti abbia aiutato ad abilitare TLS 1.3 in Nginx su Ubuntu 18.04 e Ubuntu 16.04. Abbi cura di te.