GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Abilita correttamente HTTPS su Apache con Let's Encrypt su Ubuntu

Questo tutorial ti mostrerà come abilitare correttamente HTTPS su Apache con Let's Encrypt su Ubuntu. Google Chrome e Firefox hanno già iniziato a contrassegnare le pagine Web non crittografate con la casella di immissione della password come non sicure. Alla fine tutte le pagine Web HTTP verranno contrassegnate come non sicure. HTTPS diventerà predefinito per qualsiasi sito Web. È anche un requisito se desideri utilizzare il protocollo HTTP/2 per velocizzare il tuo sito web.

Come probabilmente saprai, Let's Encrypt è un'autorità di certificazione gratuita, automatizzata e aperta. La documentazione ufficiale descrive i semplici passaggi che puoi seguire per abilitare HTTPS con Let's Encrypt, ma c'è di più. Se segui il documento ufficiale, segnerai A sul test SSL Labs. Se segui i miei passaggi, otterrai un punteggio A+ . Se hai già distribuito un certificato Let's Encrypt in precedenza, puoi comunque seguire questo tutorial per rinnovare e sostituire il tuo certificato esistente.

Prima di mostrarti i passaggi per abilitare HTTPS con Let's Encrypt, voglio prima parlare del record CAA intestazioni di sicurezza e Pinzatura OCSP . Queste cose sono ciò che può aiutarti a ottenere A+. Ti mostrerò anche come gestire il servizio CDN CloudFlare alla fine di questo tutorial.

Nota:questo tutorial funziona su tutte le versioni correnti di Apache e Ubuntu (incluse 16.04, 18.04 e 20.04).

Creazione di un record CAA per il tuo nome di dominio

L'autorizzazione dell'autorità di certificazione (CAA) è un record di risorse DNS che specifica quali autorità di certificazione (CA) sono autorizzate a emettere certificati per un particolare nome di dominio. A partire da settembre 2017, tutte le CA sono obbligate a controllare i record CAA prima di emettere il certificato per un particolare nome di dominio. Se non viene trovato alcun record CAA per un nome di dominio, qualsiasi CA può emettere un certificato per quel nome di dominio. Se una CA non è elencata nel tuo record CAA, tale CA non può emettere un certificato per il tuo nome di dominio.

Per creare un record CAA che consenta a Let's Encrypt di emettere un certificato per il tuo nome di dominio, aggiungi la seguente voce nel tuo server DNS o gestore DNS.

example.com. IN CAA 0 issue "letsencrypt.org"

Puoi anche usare iodef per fare in modo che CA segnali la richiesta di emissione di certificati dannosi al tuo indirizzo email.

example.com. IN CAA 0 iodef "mailto:your-email-address"

Il formato dei record di cui sopra è per i file di zona. Di seguito sono riportati alcuni suggerimenti per te.

  • Puoi utilizzare SSLMate CAA Record Helper per generare record CCA per il tuo nome di dominio.
  • Se stai utilizzando GoDaddy DNS, segui questo post per aggiungere il record CAA.

Puoi utilizzare il seguente comando dig per controllare il tuo record CAA.

dig example.com CAA

Tieni presente che i browser Web non verificheranno i record CAA.

Intestazioni di sicurezza

Le intestazioni di sicurezza sono importanti quanto HTTPS, ma solo una piccola percentuale di siti abilitati per HTTPS presta attenzione alle intestazioni di sicurezza. Sebbene una discussione completa sulle intestazioni di sicurezza vada oltre lo scopo di questo tutorial, voglio parlare di upgrade-insecure-requests e HSTS intestazioni perché puoi abilitarle facilmente con Let's Encrypt per aumentare la sicurezza del tuo sito.

Aggiorna richieste non sicure

Ci sono momenti in cui un sito ha abilitato HTTPS, ma alcuni CSS, immagini o JavaScript sono ancora serviti su HTTP. In questo caso, il lucchetto verde all'inizio della barra degli indirizzi del browser scomparirà. In Google Chrome, è sostituito da un'icona di informazioni; In Firefox, è sostituito da un lucchetto grigio con un triangolo giallo. Ti consigliamo di mostrare il più possibile un lucchetto verde ai visitatori del sito e il modo più semplice per risolvere questo problema è abilitare le richieste di aggiornamento non sicure header, che costringerà il browser web a utilizzare https:// per ogni http:// risorsa.

Per abilitare questa intestazione, aggiungi semplicemente --uir flag quando si emette certbot comando. Tieni presente che questa intestazione funziona su risorse ospitate sul tuo dominio e risorse su domini di terze parti che supportano HTTPS. Se la tua pagina web include risorse su server di terze parti che non sono disponibili tramite HTTPS, tali risorse verranno bloccate dai browser web, ma l'utilizzo di questa intestazione assicura che le tue pagine web ricevano sempre un lucchetto verde.

HSTS (HTTP Strict Transport Security)

L'intestazione HSTS indica ai browser Web che tutte le comunicazioni con il tuo sito Web devono essere eseguite tramite HTTPS. Si difende dallo striping SSL, che è un attacco per il downgrade da HTTPS a HTTP. Per abilitare questa intestazione, aggiungi semplicemente --hsts flag quando si emette certbot comando.

Pinzatura OCSP

Quando un browser Web si connette a un sito Web HTTPS, invia una richiesta OCSP (Online Certificate Status Protocol) all'autorità di certificazione (CA) per interrogare lo stato di revoca del certificato SSL del sito Web. Questo può ritardare il caricamento della pagina di 1-3 secondi, secondo i dati di telemetria di Firefox.

Per migliorare le prestazioni, il proprietario del sito Web può abilitare la pinzatura OCSP, nel qual caso il server Web stesso recupera la risposta OCSP firmata da CA a intervalli regolari e la invia al browser Web, eliminando così la necessità che il browser Web contatti il ​​server OCSP.

Per abilitare la pinzatura OCSP, aggiungi semplicemente --staple-ocsp flag quando si emette certbot comando.

OCSP deve pinzare

Se un hacker crea un sito Web falso e duplicato, disattiva la graffetta OCSP e blocca anche l'accesso del browser Web al server OCSP, il browser Web presumerà che sia OK e procederà al sito Web dannoso. Per risolvere questo problema, puoi abilitare la pinzatura OCSP sul tuo sito Web, che indica ai browser Web che la risposta alla pinzatura OCSP deve essere presentata dal tuo sito Web durante la connessione HTTPS. Pertanto, quando i browser Web si connettono a un sito Web falso che non dispone di OCSP, la connessione interromperà.

Per abilitare OCSP deve essere pinzata, aggiungi --must-staple flag quando si emette certbot comando.

Installazione del client Let's Encrypt (Certbot) su Ubuntu

Ora è il momento di sporcarsi le mani. A partire da Ubuntu 16.04, il client Let's Encrypt (Certbot) è incluso nel repository di Ubuntu, quindi puoi installarlo con il seguente comando. Python3-certbot-apache è il plugin Certbot Apache.

sudo apt install certbot python3-certbot-apache

Per controllare il numero di versione, esegui

certbot --version

Esempio di output:

certbot 0.31.0

Se desideri utilizzare l'ultima versione, puoi installare Certbot dallo Snap Store.

sudo apt install snapd

sudo snap install --classic certbot

Nota :Se vuoi usare la versione Snap, devi usare il percorso binario completo:/snap/bin/certbot .

Utilizzo del plug-in Apache per abilitare HTTPS

Se il tuo sito Web non utilizza il servizio CDN, ti consigliamo di utilizzare il plug-in Apache per abilitare HTTPS sul server Web Apache, poiché può ottenere automaticamente il certificato SSL/TLS e configurarlo per te. Esegui il seguente comando sul tuo server Ubuntu.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Spiegazione:

  • --apache :Usa l'autenticatore e il programma di installazione di Apache
  • --agree-tos :Accetto i termini di servizio di Let's Encrypt
  • --redirect :reindirizza automaticamente tutto il traffico HTTP su HTTPS
  • --uir :aggiungi l'intestazione "Content-Security-Policy:upgrade-insecure-requests" a ogni risposta HTTP.
  • --hsts :aggiungi l'intestazione Strict-Transport-Security a ogni risposta HTTP.
  • --staple-ocsp :Abilita la pinzatura OCSP.
  • --must-staple :aggiunge l'estensione OCSP Must Staple al certificato.
  • -d flag è seguito da un elenco di nomi di dominio, separati da virgola. Puoi aggiungere fino a 100 nomi di dominio.
  • --email :Email utilizzata per la registrazione e il contatto di recupero.

Ti verrà chiesto se desideri ricevere e-mail da EFF (Electronic Frontier Foundation). Dopo aver scelto Y o N, il tuo certificato SSL verrà automaticamente ottenuto e configurato per te, come indicato dal messaggio sottostante.

Ora se visiti il ​​tuo sito web, puoi vedere che HTTP viene automaticamente reindirizzato alla connessione HTTPS. Tieni presente che il client certbot crea /etc/apache2/sites-enabled/example.com-le-ssl.conf Host virtuale SSL durante la configurazione di SSL per il tuo sito web.

Test del tuo certificato SSL

Vai su ssllabs.com per testare il tuo certificato SSL e la configurazione. Come ho promesso, ottieni A+ . Puoi anche verificare se il tuo nome di dominio ha abilitato il record CAA, se il tuo server ha abilitato HSTS, la pinzatura OCSP e la pinzatura OCSP.

Reindirizzamento da WWW a non WWW (o viceversa)

Abbiamo già abilitato il reindirizzamento da HTTP a HTTPS, ciò che resta da fare è reindirizzare www a non www o viceversa. Se stai usando WordPress, allora è molto facile. Vai semplicemente su WordPress Dashboard> Impostazioni> Generale e imposta la tua versione preferita (www o non www) in Indirizzo WordPress e Indirizzo sito .

Se segui quella strada, ti ritroverai con quello che è noto come doppio reindirizzamento 301. Innanzitutto, il server Apache reindirizza da HTTP a HTTPS, quindi WordPress reindirizza a un dominio www o non www.

Alcuni potrebbero obiettare che puoi perdere il succo del link SEO quando esegui il doppio reindirizzamento 301. Se sei preoccupato per questo, puoi utilizzare il metodo seguente per fare in modo che tutte le versioni del dominio vadano direttamente alla destinazione finale.

Modifica il file dell'host virtuale. (Non l'host virtuale SSL)

sudo nano /etc/apache2/sites-enabled/example.com.conf

Il client CertBot ha aggiunto le seguenti righe al file per reindirizzare HTTP a HTTPS.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com [OR]
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Per reindirizzare a un dominio www o non www, è necessario modificare l'ultima riga. Sostituisci %{SERVER_NAME} con la tua versione di dominio preferita come di seguito. (dominio www)

RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Se preferisci un dominio non www, cambialo come segue.

RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Quindi salva e chiudi il file. Dovremo anche modificare l'host virtuale SSL.

sudo nano /etc/apache2/sites-enabled/example.com-le-ssl.conf

Aggiungi le seguenti righe sopra il tag di chiusura per reindirizzare il dominio non www al dominio www.

RewriteEngine on
RewriteCond %{SERVER_NAME} =example.com
RewriteRule ^ https://www.example.com%{REQUEST_URI} [END,NE,R=permanent]

Se desideri reindirizzare www a un dominio non www, aggiungi invece le seguenti righe.

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.example.com
RewriteRule ^ https://example.com%{REQUEST_URI} [END,NE,R=permanent]

Salva e chiudi il file. Ricarica il servizio Apache per rendere effettive le modifiche.

sudo systemctl reload apache2

Per essere più chiari, di seguito è riportato uno screenshot del mio file host virtuale Apache e del file host virtuale SSL per il reindirizzamento non www al dominio www.

File dell'host virtuale Apache

File host virtuale SSL Apache

Se utilizzi WordPress, assicurati di impostare la versione del dominio preferita in Indirizzo WordPress e Indirizzo sito prima di modificare i file dell'host virtuale Apache. Se le impostazioni di WordPress sono in contraddizione con la configurazione di Apache, il tuo sito sarà in un ciclo di reindirizzamento.

Come disabilitare TLSv1 e TLSv1.1

TLSv1 e TLSv1.1 non sono più considerati sicuri. Per disabilitarli, modifica il file di configurazione delle opzioni Let's Encrypt SSL.

sudo nano /etc/letsencrypt/options-ssl-apache.conf

Trova la riga seguente, che disabilita SSLv2 e SSLv3 per impostazione predefinita.

SSLProtocol             all -SSLv2 -SSLv3

Modificalo come segue per disabilitare anche TLSv1.0 e TLSv1.1.

SSLProtocol             all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

Salva e chiudi il file. Quindi riavvia Apache.

sudo systemctl restart apache2

Rinnovo automatico del certificato

Per rinnovare automaticamente il certificato Let's Encrypt, modifica semplicemente il file crontab dell'utente root.

sudo crontab -e

Quindi aggiungi la seguente riga in basso.

@daily certbot renew --quiet && systemctl reload apache2

--quiet flag sopprimerà i messaggi normali. Se vuoi ricevere messaggi di errore, aggiungi la seguente riga all'inizio del file crontab.

MAILTO=your-email-address

È necessario ricaricare Apache per presentare il nuovo certificato ai client.

CDN CloudFlare

La prima cosa che devi sapere è che se desideri installare il certificato Let's Encrypt sul tuo server e allo stesso tempo utilizzare il servizio CDN di CloudFlare, dovrai abilitare Universal SSL di CloudFlare sul tuo sito, il che significa

  • Le connessioni tra i visitatori del sito e il server perimetrale CloudFlare sono crittografate utilizzando il certificato CloudFlare Universal SSL.
  • Le comunicazioni tra il tuo server di origine e il server perimetrale CloudFlare sono crittografate utilizzando il certificato emesso da Let's Encrypt.

Se installi il certificato Let's Encrypt sul tuo server di origine, reindirizza HTTP a HTTPS e disattivi CloudFlare Universal SSL, i browser Web si lamenteranno del fatto che il tuo sito Web è in un ciclo di reindirizzamento infinito perché CloudFlare reindirizza HTTPS a HTTP.

La seconda cosa che devi sapere è che se vuoi abilitare il record CAA mentre usi CloudFlare Universal SSL, devi anche creare il seguente record CAA.

example.com. IN CAA 0 issue "comodoca.com"

example.com. IN CAA 0 issue "digicert.com"

example.com. IN CAA 0 issue "globalsign.com

Segui questo post per aggiungere il record CAA per il certificato CloudFlare Universal SSL.

Quindi, come procedi con l'installazione del certificato Let's Encrypt con CloudFlare? Bene, ci sono due scenari.

  1. Hai già installato il certificato Let's Encrypt utilizzando i passaggi precedenti, ora vuoi abilitare il servizio CloudFlare CDN.
  2. Il tuo sito Web utilizza il servizio CDN CloudFlare, ora desideri installare il certificato Let's Encrypt sul tuo server di origine.

Il primo scenario

Se sei nel primo scenario, puoi andare avanti e abilitare il servizio CloudFlare CDN e anche abilitare CloudFlare Universal SSL nel dashboard CloudFlare andando su Crypto> SSL e scegliendo Completo (rigoroso) . Il tuo sito funzionerà senza problemi.

Il secondo scenario

Se utilizzi CloudFlare CDN e ora desideri installare Let's Encrypt sul tuo server di origine, esegui il comando seguente per ottenere e installare il certificato Let's Encrypt TLS.

sudo certbot --apache --agree-tos --redirect --uir --hsts --staple-ocsp --must-staple -d www.example.com,example.com --email [email protected]

Dopo aver ottenuto e installato il certificato sul tuo server, vai alla dashboard di Cloudflare e abilita CloudFlare Universal SSL.

Passaggio successivo

Spero che questo tutorial ti abbia aiutato a abilitare HTTPS sull'host virtuale Apache con Let's Encrypt su Ubuntu . Potresti anche voler configurare il firewall dell'applicazione Web ModSecurity per proteggere il tuo sito dall'hacking.

  • Come configurare ModSecurity con Apache su Debian/Ubuntu

Per velocizzare il tuo sito web, puoi abilitare il protocollo HTTP/2 con Apache.

  • Come abilitare il protocollo HTTP/2 con Apache su Ubuntu

Come sempre, se hai trovato utile questo post, iscriviti alla nostra newsletter gratuita per ricevere più tutorial.


Ubuntu
  1. Come proteggere Nginx con Lets Encrypt su Ubuntu 20.04 / 18.04

  2. Proteggi Nginx con Let's Encrypt su Ubuntu 18.04 - Come farlo?

  3. Come installare Let's Encrypt con Apache su CentOS 7

  4. Come abilitare il protocollo HTTPS con Apache 2 su Ubuntu 20.04

  5. Come proteggere Apache con Lets Encrypt su Ubuntu 18.04

Proteggi Nginx con Let's Encrypt SSL Certificate su Ubuntu 18.04

Installa il server LAMP con Let's Encrypt Free SSL su Ubuntu 18.04

Come abilitare HTTP/2 con Apache in Ubuntu

Come proteggere Nginx con Let's Encrypt su Ubuntu 20.04

Come proteggere Apache con Let's Encrypt su Ubuntu 20.04

Come installare Django 3.2 su Ubuntu 20.04 con Apache e WSGI