GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come abilitare TLS 1.3 in Nginx su Ubuntu 18.04 e 16.04

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.

  1. La tua versione di Nginx deve supportare TLS 1.3. Ciò significa nginx 1.13 o versioni successive.
  2. 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 nginxwww-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.


Ubuntu
  1. Come abilitare SSH su Ubuntu 18.04

  2. Come installare Nginx con PHP5 e MySQL su Ubuntu 11.10

  3. Ubuntu 20.04 – Come abilitare Hwe?

  4. Come abilitare HTTP/2 in Nginx su Ubuntu e CentOS

  5. Come abilitare e disabilitare Wayland su Ubuntu

Come installare Docker in Ubuntu 20.04 ed eseguire Nginx Container

Come abilitare e disabilitare le interfacce di rete in Ubuntu 20.04

Come abilitare facilmente TLS 1.3 in Nginx su Ubuntu 20.04, 18.04, 16.04

Come abilitare TLS 1.3 su Apache e Nginx

Come installare e configurare Nginx in Ubuntu 20.04 e Ubuntu 21.04

Come installare Nginx su Ubuntu 15.04