A marzo 2018 Let's Encrypt ha aggiunto il supporto per i certificati jolly. I certificati jolly ti consentono di proteggere tutti i sottodomini di primo livello di un dominio con un singolo certificato. I certificati jolly sono disponibili solo tramite ACMEv2, che è una versione aggiornata del protocollo ACME. Per utilizzare ACMEv2 per certificati jolly o non jolly, è necessario un client che sia stato aggiornato per supportare ACMEv2. Uno di questi client è acme.sh, che è un client di protocollo ACME / ACMEv2 scritto esclusivamente in linguaggio Shell (Unix shell) senza dipendenze. Inoltre, i domini jolly devono essere convalidati utilizzando il tipo di prova DNS-01. Ciò implica che è necessario modificare i record TXT DNS per dimostrare il controllo su un dominio per ottenere un certificato jolly.
In questa guida, spieghiamo come ottenere e distribuire certificati jolly gratuiti da Let's Encrypt su Ubuntu 19.04 utilizzando il acme.shclient, lo strumento Lexicon per la manipolazione automatica dei record DNS consumando l'API Vultr e distribuendo certificati sul server Web Nginx.
Requisiti
- Server cloud Ubuntu 19.04 Vultr appena implementato.
- Hai un nome di dominio registrato. Questa guida utilizza
example.comcome dominio di esempio.
- Assicurati di aver impostato i record DNS A / AAAA e CNAME per il tuo nome di dominio completo (FQDN). Potresti consultare il tutorial Introduzione a Vultr DNS se hai bisogno di familiarizzare con i concetti DNS.
- Accesso API Vultr abilitato nel pannello di controllo dell'account Vultr.
Prima di iniziare
Controlla la versione di Ubuntu.
lsb_release -ds
# Ubuntu 19.04
Crea un nuovo account utente con sudoaccesso e il tuo nome utente preferito e passa ad esso. Usiamo johndoe.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NOTA : sostituisci johndoecon il tuo nome utente.
Imposta il fuso orario.
sudo dpkg-reconfigure tzdata
Assicurati che il tuo sistema Ubuntu sia aggiornato.
sudo apt update && sudo apt upgrade -y
Installa i pacchetti necessari.
sudo apt install -y git wget curl socat
Installa Nginx
Installa il web server Nginx.
sudo apt install -y nginx
Controlla la versione
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Installa Python e Lexicon
Come primo passo nel processo di ottenimento dei certificati jolly da Let's Encrypt utilizzando acme.sh e l'API Vultr, è necessario installare Python e Lexicon . Lexicon è un pacchetto Python che fornisce un modo per manipolare i record DNS su più provider DNS in modo standardizzato.
Installa Python se non è già installato sul tuo sistema.
sudo apt install -y python3
Conferma l'installazione verificando la versione.
python3 --version
# Python 3.7.3
Installa lo strumento Lexicon. Un lessico è uno strumento Python che consente di manipolare i record DNS su vari provider DNS in modo standardizzato.
sudo apt install -y lexicon
Controlla la versione Lexicon.
lexicon --version
# lexicon 3.0.8
Installa acme.shclient
Acme.shè un client di protocollo ACME scritto esclusivamente in linguaggio Shell (Unix shell) che automatizza il processo di acquisizione di un certificato firmato tramite Let's Encrypt. Supporta ACME v1 e ACME v2 e, soprattutto, supporta i certificati jolly ACME v2. In questa sezione, installiamo uno script Acme.sh.
NOTA: si consiglia di utilizzare l' rootutente per l'installazione acme.sh, anche se non richiede root/ sudoaccesso.
Passa rootall'utente dall'utente normale se lo hai creato.
sudo su - root
Scarica e installa acme.sh.
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "your_email@example.com"
source ~/.bashrc
cd
Controlla la versione
acme.sh --version
# v2.8.2
Ottieni certificati jolly da Let's Encrypt
Per ottenere un certificato jolly, è possibile utilizzare solo il metodo di convalida DNS. Utilizziamo le API DNS Lexicon e Vultr per manipolare i record DNS TXT.
Ottieni certificati jolly RSA ed ECC per il tuo dominio.
# Configure your API key and username
export PROVIDER=vultr
export LEXICON_VULTR_USERNAME="your_vultr_email@example.com"
export LEXICON_VULTR_TOKEN="XXXXXXXXXXXXXXX"
# RSA 2048
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength 2048
# ECC 256
acme.sh --issue --dns dns_lexicon -d example.com -d '*.example.com' --keylength ec-256
NOTA : non dimenticare di sostituire example.comcon il tuo nome di dominio e sostituire i valori dei segnaposto dell'API Vultr con i tuoi.
Dopo aver eseguito i comandi precedenti, i certificati e le chiavi sono in:
- Per RSA:
~/.acme.sh/example.comdirectory.
- Per ECC / ECDSA:
~/.acme.sh/example.com_eccdirectory.
NOTA : non è necessario utilizzare i file cert nella ~/.acme.sh/cartella, sono solo per uso interno, la struttura della directory potrebbe cambiare in futuro.
Per elencare i tuoi certificati, puoi eseguire:
acme.sh --list
Crea una cartella per archiviare i certificati in produzione. Usiamo /etc/letsencryptdirectory.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Installa / copia i certificati per l'uso in produzione sul tuo server.
# RSA
acme.sh --install-cert -d example.com \
--cert-file /etc/letsencrypt/example.com/cert.pem \
--key-file /etc/letsencrypt/example.com/private.key \
--fullchain-file /etc/letsencrypt/example.com/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
# ECC/ECDSA
acme.sh --install-cert -d example.com --ecc \
--cert-file /etc/letsencrypt/example.com_ecc/cert.pem \
--key-file /etc/letsencrypt/example.com_ecc/private.key \
--fullchain-file /etc/letsencrypt/example.com_ecc/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
Ora che abbiamo ottenuto correttamente i certificati jolly da Let's Encrypt, dobbiamo configurare il web server Nginx. Tutti i certificati vengono rinnovati automaticamente ogni 60 giorni.
Dopo aver ottenuto e installato certificati nella posizione preferita, è possibile disconnettersi da un rootutente a un sudoutente normale e continuare a gestire il server utilizzando, sudose necessario.
exit
Esegui sudo vim /etc/nginx/sites-available/example.com.confe popola il file con il seguente contenuto. Sostituisci tutte le occorrenze di example.comcon il tuo nome di dominio.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com *.example.com;
root /var/www/example.com;
# RSA
ssl_certificate /etc/letsencrypt/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com/private.key;
# ECDSA
ssl_certificate /etc/letsencrypt/example.com_ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/example.com_ecc/private.key;
}
Attiva la nuova example.com.confconfigurazione collegando il file alla sites-enableddirectory.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Testare la configurazione di Nginx.
sudo nginx -t
Ricarica Nginx.
sudo systemctl reload nginx.service
Questo è tutto. Abbiamo distribuito certificati con caratteri jolly su Nginx, utilizzando acme.sh, Lexicon e Vultr API. I certificati con caratteri jolly possono essere utili quando si desidera proteggere più sottodomini di primo livello generati dinamicamente.