Come configurare la crittografia SSL end-to-end di CloudFlare

Configurare SSL per qualsiasi sito web è una sfida. I visitatori del sito, i browser e i motori di ricerca premiano un sito web correttamente protetto tramite Secure Sockets Layer (SSL). In precedenza, questo processo richiedeva l’acquisto, l’installazione e la configurazione di un certificato SSL. Ma con Cloudflare SSL, puoi completare il processo di configurazione SSL con solo alcuni clic!

In questo articolo, imparerai come configurare il tuo sito con crittografia SSL tramite Cloudflare. Quindi procedi verso connessioni SSL crittografate end-to-end!

Prerequisiti

Per seguire questo tutorial, sono necessari alcuni prerequisiti elencati di seguito:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Un server Ubuntu Linux con NGINX installato e configurato. Questo tutorial mostra l’utilizzo di Linux e NGINX, ma lo stesso processo generale funziona anche per IIS o Apache.

Configurare Cloudflare Universal SSL: Solo l’Inizio

Ci sono diversi modi per configurare un SSL utilizzando Cloudflare. Spesso, il metodo più veloce è optare per Universal SSL. Perché? Con Universal SSL, invece di cercare e acquistare un certificato SSL, Cloudflare fornisce un certificato e tutto il traffico inviato attraverso Cloudflare utilizzerà quel certificato.

Dopo aver abilitato Universal SSL, Cloudflare presenta un certificato SSL valido sia ai visitatori che ai motori di ricerca. Cloudflare non richiede neanche la configurazione del server o del sito web per utilizzare quel certificato, molto comodo!

1. Apri il tuo browser web e accedi al pannello di controllo di Cloudflare.

2. Naviga al tuo sito dalla lista di dominio dell’account, come mostrato di seguito.

Choose the site to change options for.

3. Ora, fai clic su SSL/TLS per visualizzare le opzioni di crittografia del tuo sito.

The SSL/TLS Encryption mode page

4. Scegli l’opzione Flexible per abilitare Universal SSL. Una volta selezionato, il cambiamento avrà effetto immediato. Ora il tuo sito è crittografato tra il browser e Cloudflare!

Enabling Universal SSL on Cloudflare

Configurazione della crittografia SSL end-to-end completa

Anche se Universal SSL è un’ottima opzione per iniziare a proteggere i siti, lascia non sicuro il traffico tra il server e Cloudflare. Per fortuna, ci sono due modalità di crittografia per crittografare il traffico da Cloudflare al server, Full e Full (strict) encryption, ciascuna con requisiti di installazione del certificato principalmente diversi.

  • Full – Richiede un certificato sul server, ma può essere un certificato autofirmato.
  • Full (rigido) – Il certificato server installato deve essere un certificato valido.

Andiamo oltre alla differenza tra queste cifrature e come configurarle.

Configurazione della crittografia Full SSL/TLS con un certificato autogenerato

A differenza di Universal SSL, la crittografia Full SSL/TLS richiede che il tuo web server fornisca correttamente un certificato SSL per crittografare il traffico dal server a Cloudflare. Ci sono molti modi per farlo, ma questo tutorial illustra i passaggi su un server Linux con NGINX.

Generare un certificato autogenerato

Per crittografare la connessione tra Cloudflare e il tuo server di origine, è necessario un certificato SSL. Poiché la modalità di crittografia Full SSL/TLS non richiede che il certificato sia completamente attendibile, è possibile utilizzare un certificato autogenerato per avviarsi rapidamente.

1. Secure Shell (SSH) nel tuo web server Linux.

2. Cambia (cd) nella directory SSL standard di Ubuntu (/etc/ssl) eseguendo il comando sottostante. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Ora, genera sia le chiavi pubbliche che private per il tuo sito con il comando openssl. Per farlo, esegui il comando openssl qui sotto.

Questo comando realizza alcune cose:

  • Richiede (req) un certificato X.509 fornito dal parametro -x509.
  • Quando richiamato da NGINX, consente a NGINX di leggere il certificato all’avvio utilizzando il parametro -nodes.
  • Specifica il numero di giorni, per i quali il certificato è valido.
  • Crea una nuova chiave pubblica e privata con -newkey tramite la crittografia RSA a 2048 bit (rsa:2048).
  • Salva la chiave privata in /etc/ssl/private/nginx-selfsigned.key utilizzando il parametro -keyout.
  • Salva la chiave pubblica in /etc/ssl/certs/nginx-selfsigned.crt utilizzando il parametro -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Se openssl restituisce un errore benigno del tipo Can't load /root/.rnd into RNG, è necessario commentare la linea #RANDFILE = $ENV::HOME/.rnd in /etc/ssl/openssl.cnf. Tutte le versioni moderne di openssl ricorrono all’uso del dispositivo di entropia casuale di sistema /dev/urandom e non richiedono un file specifico per il seed.

4. Dopo aver eseguito con successo il comando, openssl ti chiederà alcune informazioni. Di seguito troverai tutti i valori forniti per questo tutorial.

  • Nome del Paese: US
  • Nome dello Stato o Provincia: Illinois
  • Nome della Località: Bloomington
  • Nome dell’Organizzazione: Test Company, LLC
  • Nome dell’Unità Organizzativa: <vuoto>
  • Nome Comune: test.adamlistek.me
  • Indirizzo email: [email protected]
Generating a self-signed certificate

5. Infine, verifica che il certificato esista utilizzando il comando test. Se il comando test restituisce (echo $?) 0, allora il file esiste come previsto. Puoi vedere nello screenshot seguente che ogni comando ha restituito un valore 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Configurazione di NGINX

Ora che il certificato è stato generato e memorizzato nelle posizioni chiave /etc/ssl/certs e /etc/ssl/private, NGINX deve essere configurato per applicare il certificato e servire il contenuto del sito.

Le configurazioni del sito NGINX sono definite in blocchi server che sono tipicamente contenuti in file di host virtuali. Nell’esempio seguente, la configurazione di base del sito è memorizzata nel file test.adamlistek.me.conf e inclusa nel file principale nginx.conf.

1. Innanzitutto, crea un nuovo file di host virtuale con il nome che preferisci, ma per questo esempio, chiamalo test.adamlistek.me.conf sotto la directory /etc/nginx/vhosts.d. Quindi copia il contenuto sottostante nel file di host virtuale e salvane una copia.

Sostituisci il nome di dominio test.adamlistek.me con il tuo, poiché questo è solo a scopo dimostrativo. E se la /etc/nginx/vhosts.d directory non esiste, crea la directory eseguendo il comando mkdir /etc/nginx/vhosts.d.

server {
   # Ascolta sulla porta 80 per IPv4 e IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Esegui un reindirizzamento 301 con eventuali parametri al blocco del server SSL di seguito
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Ascolta sulla porta 443 per IPv4 e IPv6 con HTTP2 abilitato (richiede SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # La posizione del certificato pubblico e privato
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # La posizione dei file web da caricare, questa è la posizione predefinita di NGINX
   root /usr/share/nginx/html;
 # Il file predefinito da servire in una richiesta di dominio principale
   index index.html;
 }

2. Verifica che il tuo file di configurazione NGINX principale, /etc/nginx/nginx.conf, contenga la linea include necessaria all’interno del blocco http, posizionato alla fine del blocco.

# Le configurazioni del server vanno qui
 …
 http {
     # Altre configurazioni vanno qui# Includi gli host virtuali
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Riavvia NGINX con il seguente comando se stai utilizzando systemd, che è un moderno gestore di sistema e servizi per Linux.

service nginx restart

4. Torna su Cloudflare, verifica che il certificato autofirmato stia funzionando. Per farlo, disabilita la “nuvola arancione” per il record DNS sotto Stato proxy, come mostrato di seguito. Disabilitare l’opzione “nuvola arancione” bypassa Cloudflare e serve le richieste direttamente dal webserver.

Disabling Cloudflare proxying via Proxy Status.

5. Assicurarsi che il sito restituisca il certificato autofirmato appena creato navigando sul sito web utilizzando il browser. Ciò comporterà la visualizzazione di una pagina di avviso, mostrata di seguito.

Displaying the self-signed certificate error.

6. Infine, abilitare la crittografia Full TLS/SSL su Cloudflare. Per farlo, riattivare lo stato di proxy “nuvola arancione” sul record DNS che hai precedentemente disabilitato. Quindi accedere alla scheda SSL/TLS e selezionare l’opzione radio Full mostrata di seguito.

Enabling Full SSL/TLS encryption on Cloudflare.

Generazione dei certificati di origine per la crittografia Full (strict) SSL/TLS

La modalità di crittografia Full non garantisce che il certificato presentato dal server web abbia una catena di certificati effettivamente valida. Quindi, opta per la crittografia non-strict e Cloudflare accetterà qualsiasi certificato presentato dal server.

Cloudflare offre la possibilità di generare un certificato TLS gratuito per proteggere la connessione al tuo server di origine. Tuttavia, ci sono due svantaggi nell’utilizzare un certificato di origine fornito da Cloudflare. Il primo è che è necessario generare e installare il certificato manualmente. Il secondo è che il certificato appare come un certificato autofirmato che nessun browser fidato, tranne Cloudflare, accetterebbe.

È possibile automatizzare la generazione del certificato utilizzando l’endpoint Origin CA Create Certificate API, ma ciò va oltre lo scopo di questo tutorial.

1. Accedere al server di origine andando alla scheda SSL/TLS -> Server di origine, come mostrato di seguito, e fare clic sul pulsante Crea certificato.

Navigating to the Origin Server page.

2. Come puoi vedere qui sotto, le opzioni predefinite sono già impostate per generare un certificato wildcard per il dominio con 15 anni di validità, fantastico! Quindi lascia le opzioni predefinite e genera il certificato cliccando sul pulsante Crea nell’angolo in basso a destra della pagina.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Aggiungi il certificato appena creato al tuo sistema Linux salvando prima le chiavi private e pubbliche con l’editor di testo GNU nano. Dato che ci sono due chiavi da salvare, dovrai salvare i file delle chiavi uno alla volta.

Assicurati di salvare la Chiave Privata poiché è disponibile solo al momento in cui hai generato un Certificato Originale. Se perdi accidentalmente questa chiave, revoca il certificato e rilasciane uno nuovo.

Apri un terminale, quindi crea e apri il file della chiave pubblica (nginx-test.adamlistek.me.crt) in nano eseguendo il primo comando qui sotto.

Successivamente, torna su Cloudflare e copia la chiave del Certificato d’Origine (chiave pubblica) cliccando sull’opzione Fai clic per copiare, come mostrato di seguito. Poi incolla (Ctrl+U) la chiave pubblica che hai copiato nel file della chiave pubblica aperto in nano. Salva le modifiche (Ctrl+O) ed esci (Ctrl+X) da nano.

Dopo aver salvato il file della chiave pubblica, ripeti lo stesso processo per creare il file della chiave, copiando la chiave da Cloudfare e salvandola sul file della chiave. Ma questa volta stai creando il file della chiave privata (nginx-test.adamlistek.me.key).

# La chiave pubblica, nella sezione Certificato di origine
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# La chiave privata, nella sezione omonima
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Ora che hai creato le chiavi pubbliche e private, indica a NGINX la posizione dei certificati. Fallo modificando il file di configurazione test.adamlistek.me.conf con le seguenti righe, modificate per supportare il tuo dominio.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Per applicare i nuovi certificati, riavvia NGINX con il seguente comando.

service nginx restart

6. Torna ora alla scheda SSL/TLS in Cloudflare, aggiorna la modalità di crittografia SSL/TLS cliccando su Full (strict), come mostrato di seguito.

Setting the Encryption mode to Full (strict).

Abilita la crittografia SSL/TLS completa (strict) con LetsEncrypt

Il principale svantaggio nell’utilizzare un certificato di origine Cloudflare è che è valido solo per Cloudflare. Se hai bisogno di un certificato completamente fidato dal browser, sia come fallback che per un controllo più avanzato, LetsEncrypt offre la possibilità di generare un certificato adeguato.

Anche se puoi utilizzare qualsiasi certificato valido, LetsEncrypt è una scelta comune per generare un certificato valido. Ci sono vari client LetsEncrypt disponibili, ma questo tutorial utilizza il client acme.sh.

Dato che sei già su Cloudflare, uno dei migliori metodi per la fornitura DNS con LetsEncrypt è tramite l’opzione DNS.

1. Innanzitutto, apri il terminale e installa acme.sh tramite il comando curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Il passo successivo consiste nel creare o modificare il file account.conf situato nella directory di installazione per aggiungere le chiavi API di Cloudflare salvate. Queste chiavi possono essere trovate nella sezione Profilo —> Token API della dashboard di Cloudflare.

Anche se è possibile creare un token specifico con permessi limitati, per gli scopi di questo tutorial, utilizzare invece la Chiave API Globale, come mostrato di seguito.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Generare il certificato tramite il seguente comando. Notare che il comando qui sotto indica al client acme.sh di utilizzare Cloudflare (dns_cf) per verificare (--dns) la proprietà del certificato. Imposta quindi il tempo di attesa (--dnsslep) a 20 secondi prima di rilasciare (--issue) il certificato per il dominio (-d) test.adamlistek.me.

Una volta completato il comando, di seguito troverai i percorsi in cui puoi trovare il tuo certificato, la chiave del certificato, il certificato CA intermedio e i certificati della catena completa.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Come prima, modificare la configurazione del sito NGINX per cambiare la posizione del ssl_certificate e ssl_certificate_key. Assicurati di sostituire /home/user con la posizione in cui è installato il tuo acme.sh.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Applicare la nuova configurazione riavviando NGINX con il seguente comando.

service nginx restart

6. Infine, aggiorna la modalità di crittografia SSL/TLS di Cloudflare andando alla scheda SSL/TLS, quindi clicca su Completo (rigido).

Setting the Encryption mode to Full (strict).

Conclusioni

In tutto questo tutorial, hai imparato come proteggere il tuo sito con le varie opzioni SSL/TLS fornite da Cloudflare. Aggiungere LetsEncrypt alla configurazione SSL di Cloudflare aggiunge anche un’opzione di certificato di origine flessibile e gestito dall’utente!

Con la conoscenza delle varie opzioni per proteggere la connessione al visitatore del sito, lavorerai per ottenere una connessione completamente sicura al tuo server con SSL di Cloudflare?

Source:
https://adamtheautomator.com/cloudflare-ssl/