În martie 2018 Let's Encrypt a adăugat suport pentru certificatele wildcard. Certificările Wildcard vă permit să securizați toate subdomeniile de prim nivel ale unui domeniu cu un singur certificat. Certificările Wildcard sunt obținute doar prin ACMEv2, care este o versiune actualizată a protocolului ACME. Pentru a utiliza ACMEv2 pentru certificate wildcard sau non-wildcard, veți avea nevoie de un client care a fost actualizat pentru a accepta ACMEv2. Un astfel de client este acme.sh, care este un client de protocol ACME / ACMEv2 scris pur în limbaj Shell (shell Unix) fără nicio dependență. Mai mult, domeniile wildcard trebuie validate folosind tipul de provocare DNS-01. Acest lucru implică faptul că trebuie să modificați înregistrările DNT TXT pentru a dovedi controlul asupra unui domeniu pentru a obține un certificat wildcard.
În acest ghid, vă explicăm cum să obțineți și să desfășurați certificate wildcard gratuite de la Let's Encrypt pe Ubuntu 19.04 folosind instrumentul acme.shclient, Lexicon pentru manipularea automată a înregistrărilor DNS prin consumarea API-ului Vultr și implementarea certificatelor pe serverul web Nginx.
cerinţe
- Ubuntu 19.04 Server cloud Vultr recent implementat.
- Aveți un nume de domeniu înregistrat. Acest ghid folosește
example.comca domeniu de exemplu.
- Asigurați-vă că ați setat înregistrări DNS A / AAAA și CNAME pentru numele dvs. de domeniu complet calificat (FQDN). Poate doriți să consultați tutorialul Introducere în Vultr DNS dacă aveți nevoie să vă familiarizați cu conceptele DNS.
- Accesul API Vultr activat în panoul de control al contului dvs. Vultr.
Înainte de a începe
Verificați versiunea Ubuntu.
lsb_release -ds
# Ubuntu 19.04
Creați un cont de utilizator nou cu sudoacces și numele de utilizator preferat și treceți la acesta. Folosim johndoe.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
NOTĂ : Înlocuiți johndoecu numele de utilizator.
Setați fusul orar.
sudo dpkg-reconfigure tzdata
Asigurați-vă că sistemul Ubuntu este actualizat.
sudo apt update && sudo apt upgrade -y
Instalați pachetele necesare.
sudo apt install -y git wget curl socat
Instalați Nginx
Instalați serverul web Nginx.
sudo apt install -y nginx
Verificați versiunea.
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Instalați Python și Lexicon
Ca prim pas în procesul de obținere a certificatelor wildcard de la Let's Encrypt folosind acme.sh și API Vultr, trebuie să instalați Python și Lexicon . Lexicon este un pachet Python care oferă o modalitate de a manipula înregistrările DNS pe mai mulți furnizori DNS într-un mod standardizat.
Instalați Python dacă nu este deja instalat pe sistemul dvs.
sudo apt install -y python3
Confirmați instalarea verificând versiunea.
python3 --version
# Python 3.7.3
Instalați instrumentul Lexicon. Un lexicon este un instrument Python care vă permite să manipulați înregistrările DNS pe diverși furnizori DNS într-un mod standardizat.
sudo apt install -y lexicon
Verificați versiunea Lexicon.
lexicon --version
# lexicon 3.0.8
Instalați acme.shclientul
Acme.sheste un client de protocol ACME scris exclusiv într-un limbaj Shell (Unix shell) care automatizează procesul de obținere a unui certificat semnat prin Let's Encrypt. Acceptă ACME v1 și ACME v2 și, cel mai important, acceptă certificatele wildcard ACME v2. În această secțiune, instalăm un script Acme.sh.
NOTĂ: Se recomandă utilizarea rootutilizatorului pentru a instala acme.sh, deși nu necesită root/ sudoacces.
Treceți la rootutilizator de la utilizatorul obișnuit dacă l-ați creat.
sudo su - root
Descărcați și instalați acme.sh.
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "[email protected]"
source ~/.bashrc
cd
Verificați versiunea.
acme.sh --version
# v2.8.2
Obțineți certificate wildcard de la Let's Encrypt
Pentru a obține un certificat wildcard, putem utiliza doar metoda de validare DNS. Folosim API-ul Lexicon și Vultr DNS pentru a manipula înregistrările DNT TXT.
Obțineți certificatele wildcard RSA și ECC pentru domeniul dvs.
# Configure your API key and username
export PROVIDER=vultr
export LEXICON_VULTR_USERNAME="[email protected]"
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
NOTĂ : Nu uitați să înlocuiți example.comcu numele dvs. de domeniu și să înlocuiți valorile marcatorului API Vultr cu cele proprii.
După executarea comenzilor precedente, certificatele și cheile sunt în:
- Pentru RSA:
~/.acme.sh/example.comdirector.
- Pentru ECC / ECDSA:
~/.acme.sh/example.com_eccdirector.
NOTĂ : Nu ar trebui să utilizați fișierele cert din ~/.acme.sh/folder, sunt numai pentru uz intern, structura directoarelor se poate schimba în viitor.
Pentru a enumera certificatele, puteți rula:
acme.sh --list
Creați un folder pentru a stoca certificatele în producție. Folosim /etc/letsencryptdirectorul.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Instalați / copiați certificate pentru utilizare în producție pe serverul dvs.
# 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"
Acum, după ce am obținut cu succes certificări wildcard de la Let's Encrypt, trebuie să configurăm serverul web Nginx. Toate certificatele sunt reînnoite automat la fiecare 60 de zile.
După obținerea și instalarea certificatelor în locația preferată, puteți să vă deconectați de la rootutilizator la un sudoutilizator obișnuit și să continuați să vă gestionați serverul utilizând, sudodacă este necesar.
exit
Rulați sudo vim /etc/nginx/sites-available/example.com.confși populați fișierul cu următorul conținut. Înlocuiți toate aparițiile example.comcu un nume de domeniu propriu.
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;
}
Activați noua example.com.confconfigurație prin conectarea fișierului la sites-enableddirector.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Testați configurația Nginx.
sudo nginx -t
Reîncărcați Nginx.
sudo systemctl reload nginx.service
Asta e. Am implementat certificate wildcard în Nginx, folosind API-ul acme.sh, Lexicon și Vultr. Certificările Wildcard pot fi utile atunci când doriți să asigurați mai multe subdomenii de prim nivel generat dinamic.