Panoramica
Let's encrypt è un'autorità di certificazione che fornisce un modo semplice per ottenere gratuitamente un certificato SSL/TLS per il tuo sito web, abilitando così https crittografati sui server web. Let's Encrypt semplifica l'acquisizione e l'installazione del certificato SSL utilizzando un software chiamato CertBot. Questo client software serve un processo completamente automatizzato per i server Web Apache. Tuttavia, i certificati SSL gratuiti di Let's Encrypt possono essere installati manualmente su qualsiasi server Web con alcune modifiche interne.
In questo tutorial, dimostreremo la procedura per utilizzare certbot-auto
Crittografiamo il client per ottenere un certificato SSL gratuito e utilizzarlo con Nginx su Ubuntu 14.04. Questo tutorial ti spiegherà anche come rinnovare automaticamente il tuo certificato SSL. Se stai utilizzando un server web diverso, segui semplicemente la documentazione del tuo server web per imparare a utilizzare il certificato con la tua configurazione.
Prerequisito
- Utente non root con privilegi Sudo
- Devi possedere o avere il controllo amministrativo sul dominio per il quale desideri ottenere il certificato SSL.
- Un record A creato sotto il pannello DNS, che indirizza il tuo dominio all'indirizzo IP pubblico del tuo server. Ciò è necessario a causa del modo in cui Let's Encrypt convalida la tua proprietà del dominio per il quale sta emettendo un certificato. Ad esempio, se desideri ottenere un certificato per
example.com
, quel dominio deve essere risolto sul tuo server affinché il processo di convalida funzioni. La nostra configurazione utilizzeràexample.com
ewww.example.com
come i nomi di dominio, quindi sono richiesti entrambi i record DNS
Fase 1 — Installa Let's Encrypt Client
Inizialmente, devi scaricare il client software CertBot sul tuo server. Puoi scaricare CertBot dal sito Web ufficiale di EFF.
Scarica il software CertBot nella directory /usr/local/sbin directory on your server:
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
$ cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto [sudo] password for example: --2016-11-28 13:26:28-- https://dl.eff.org/certbot-auto Resolving dl.eff.org... 173.239.79.196 Connecting to dl.eff.org|173.239.79.196|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 44442 (43K) [text/plain] Saving to: `certbot-auto' 100%[======================================>] 44,442 154K/s in 0.3s 2016-11-28 13:26:30 (154 KB/s) - `certbot-auto' saved [44442/44442]
Cert-Bot è ora scaricato in /usr/local/sbin sul tuo server. Ora rendi eseguibile il file immettendo il seguente comando:
sudo chmod a+x /usr/local/sbin/certbot-auto
Il software Cerbot-auto è ora pronto per essere installato.
Fase 2 — Ottieni un certificato
Esistono diversi modi per ottenere un certificato SSL da Let's Encrypt tramite vari plugin. È necessario ottenere un plug-in di autenticazione per acquisire un certificato SSL. Assicurati che questi plugin otterranno solo il certificato e dovrai installarlo manualmente.
In questo tutorial, utilizziamo un plugin chiamato Webroot per l'autenticazione.
Plugin Webroot
Il plug-in Webroot genera un file esclusivo nella directory / .well-known all'interno della radice del tuo documento, a cui Let's Encrypt può accedere tramite il tuo server web e questo completerà la convalida di la tua autorità sul dominio. Potrebbe essere necessario configurare l'autorizzazione per il file in / .well-known.
Se non hai ancora installato Ngnix, usa i comandi seguenti per installarlo:
sudo yum update sudo yum install ngnix
Per rendere il file accessibile a certbot-auto, apportiamo alcune modifiche richieste al file di configurazione di Nginx. Il file di configurazione di ngnix si trova nella directory /etc/nginx/sites-available/default, per impostazione predefinita. Modifichiamo il file di configurazione:
sudo vim /etc/nginx/sites-available/default
Aggiungi il seguente blocco di posizione al file:
Aggiungi al blocco server SSLserver {
. . .
location ~ /.well-known {
allow all;
}
. . .
}
Vuoi anche cercare su cosa è impostata la radice del tuo documento cercando la root
direttiva, poiché il percorso è necessario per utilizzare il plug-in Webroot. Se stai utilizzando il file di configurazione predefinito, la radice sarà /usr/share/nginx/html
.
Salva il file premendo Esc seguito da :wq! e premi il tasto Invio.
Puoi controllare il file di configurazione per errori di sintassi:
sudo nginx -t
Se trovi il file di configurazione privo di errori di sintassi, riavvia il servizio ngnix
sudo service nginx restart
Ora possiamo usare il plugin webroot per la convalida, poiché conosciamo l'esatta posizione del percorso webroot. Utilizzare il comando seguente per richiedere il certificato SSL utilizzando il plug-in webroot:
certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
I nomi di dominio non devono essere specificati con -d opzione. Se desideri che un singolo certificato funzioni con più nomi di dominio (ad es. example.com e www.example.com ), assicurati di includerli tutti, a partire dal dominio di livello più alto (ad es. example.com ).
Nota: Il certbot-auto
il software richiede i privilegi di superutente, quindi ti verrà richiesto di inserire la tua password se non hai utilizzato sudo
recentemente.
Quando certbot-auto inizializza ti verranno richieste alcune informazioni. I prompt esatti possono variare a seconda che tu abbia utilizzato certbot-auto cliente prima. Fornisci le informazioni necessarie e alla fine seleziona Accetto.
Output:IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Annota il percorso e la data di scadenza dall'output.
Nota firewall: Se ricevi un messaggio di errore come Failed to connect to host for DVSNI challenge
, potrebbe essere necessario configurare il firewall del tuo server per consentire il traffico TCP sulla porta 80
e 443
.
Nota: Se il tuo dominio è instradato tramite un servizio DNS come CloudFlare, dovrai disabilitarlo temporaneamente fino a quando non avrai ottenuto il certificato.
File del certificato
Dopo aver ottenuto il certificato, avrai i seguenti file con codifica PEM:
- cert.pem: Il certificato del tuo dominio
- chain.pem: Il certificato della catena Let's Encrypt
- fullchain.pem:cert.pem e chain.pem combinato
- privkey.pem: La chiave privata del tuo certificato
Puoi verificare che i file esistano eseguendo questo comando (sostituendo il tuo nome di dominio):
sudo ls -l /etc/letsencrypt/live/your_domain_name
L'output dovrebbe essere costituito dai quattro file di certificato menzionati in precedenza. Tra un momento, configurerai il tuo server web per utilizzare fullchain.pem come file del certificato e privkey.pem come file della chiave del certificato.
Genera un forte gruppo Diffie-Hellman
Per aumentare ulteriormente la sicurezza, genera un gruppo Diffie-Hellman forte utilizzando il comando:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Il percorso del gruppo DH sarebbe /etc/ssl/certs/dhparam.pem 2048
Fase 3 — Configura TLS/SSL su Web Server (Nginx)
Ora devi configurare il tuo server web Nginx per usarlo. Modifica la configurazione di Nginx che contiene il tuo blocco server :
sudo nano /etc/nginx/sites-available/default
Trova il server
bloccare. Commenta o elimina le righe che configurano questo blocco server per l'ascolto sulla porta 80. Nella configurazione predefinita, queste due righe dovrebbero essere eliminate:
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
Configureremo invece questo blocco server per l'ascolto sulla porta 443 con SSL abilitato. All'interno del tuo server {
block, aggiungi le seguenti righe ma sostituisci tutte le istanze di example.com
con il tuo dominio:
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
Ciò consente al tuo server di utilizzare SSL e gli dice di utilizzare il certificato Let's Encrypt SSL che abbiamo ottenuto in precedenza.
Per consentire solo i protocolli e le crittografie SSL più sicuri e utilizzare il forte gruppo Diffie-Hellman che abbiamo generato, aggiungi le seguenti righe allo stesso blocco server:
Aggiunte alla configurazione di Nginx — 2 di 3 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
Infine, al di fuori del blocco server originale (che è in ascolto su HTTPS, porta 443), aggiungi questo blocco server per reindirizzare HTTP (porta 80) a HTTPS.
Aggiunte alla configurazione di Nginx — 3 di 3server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
Salva ed esci.
Verifica il file di configurazione per errori di sintassi digitando:
sudo nginx -t
Una volta verificato che non ci sono errori di sintassi, metti in atto le modifiche riavviando Nginx:
sudo service nginx restart
Il certificato Let's Encrypt TLS/SSL è ora attivo. A questo punto, dovresti verificare che il certificato TLS/SSL funzioni visitando il tuo dominio tramite HTTPS in un browser web.
Puoi utilizzare il rapporto Qualys SSL Labs per vedere il punteggio della configurazione del tuo server:
In un browser web:https://www.ssllabs.com/ssltest/analyze.html?d=example.com
Questa configurazione SSL dovrebbe riportare un A+ valutazione.
Fase 4:imposta il rinnovo automatico
I certificati Let's Encrypt sono validi per 90 giorni, ma si consiglia di rinnovare i certificati ogni 60 giorni per consentire un margine di errore. Al momento in cui scrivo, il rinnovo automatico non è ancora disponibile come funzionalità del client stesso, ma puoi rinnovare manualmente i tuoi certificati eseguendo il certbot-auto
cliente con il renew
opzione.
Per attivare il processo di rinnovo per tutti i domini installati, esegui questo comando:
certbot-auto renew
Poiché abbiamo installato il certificato di recente, il comando verificherà solo la data di scadenza e stamperà un messaggio che informa che il certificato non è ancora dovuto al rinnovo. L'output dovrebbe essere simile a questo:
Output:Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sammy/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Nota che se hai creato un certificato in bundle con più domini, nell'output verrà mostrato solo il nome di dominio di base, ma il rinnovo dovrebbe essere valido per tutti i domini inclusi in questo certificato .
Un modo pratico per garantire che i tuoi certificati non diventino obsoleti è creare un lavoro cron che esegua periodicamente il comando di rinnovo automatico per te. Poiché il rinnovo verifica prima la data di scadenza ed esegue il rinnovo solo se il certificato è a meno di 30 giorni dalla scadenza, è sicuro creare un processo cron che viene eseguito ogni settimana o anche ogni giorno, ad esempio.
Modifichiamo crontab per creare un nuovo lavoro che eseguirà il comando di rinnovo ogni settimana. Per modificare crontab per l'utente root, esegui:
sudo crontab -e
Aggiungi le seguenti righe:
voce crontab30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
Salva ed esci. Questo creerà un nuovo lavoro cron che eseguirà il certbot-auto renew
comanda ogni lunedì alle 2:30 e ricarica Nginx alle 2:35 (quindi verrà utilizzato il certificato rinnovato). L'output prodotto dal comando verrà reindirizzato a un file di registro situato in /var/log/le-renewal.log
.