Krav
Innan du börjar
Installera Nginx
Installera Python och Lexicon
Installera acme.sh-klienten
Skaffa jokerteckencertifikat från Let's Encrypt
Konfigurera Nginx webbserver
I mars 2018 lade Let's Encrypt till stöd för jokerteckencertifikat. Jokerteckencertifikat låter dig säkra alla underdomäner på första nivån för en domän med ett enda certifikat. Jokerteckencertifikat kan endast erhållas via ACMEv2, som är en uppdaterad version av ACME-protokollet. För att använda ACMEv2 för jokertecken eller icke-jokerteckencertifikat behöver du en klient som har uppdaterats för att stödja ACMEv2. En sådan klient är acme.sh, som är en ACME/ACMEv2-protokollklient skriven enbart i Shell-språket (Unix-skal) utan några beroenden. Dessutom måste jokerteckendomäner valideras med DNS-01-utmaningstypen. Det innebär att du måste ändra DNS TXT-poster för att bevisa kontroll över en domän för att få ett jokerteckencertifikat.
I den här guiden förklarar vi hur man skaffar och distribuerar gratis jokerteckencertifikat från Let's Encrypt på Ubuntu 19.04 genom att använda acme.sh
klient, Lexicon- verktyg för automatisk manipulering av DNS-poster genom att konsumera Vultr API och distribuera certifikat till Nginx webbserver.
Krav
- Nyinstallerad Ubuntu 19.04 Vultr molnserver.
- Du har ett registrerat domännamn. Den här guiden använder
example.com
som exempeldomän.
- Se till att du har angett A/AAAA och CNAME DNS-poster för ditt Fully Qualified Domain Name (FQDN). Du kanske vill konsultera Introduktion till Vultr DNS-handledning om du behöver bekanta dig med DNS-koncept.
- Vultr API-åtkomst aktiverad i ditt Vultr-kontokontrollpanel.
Innan du börjar
Kontrollera Ubuntu-versionen.
lsb_release -ds
# Ubuntu 19.04
Skapa ett nytt användarkonto med sudo
åtkomst och ditt föredragna användarnamn och byt till det. Vi använder johndoe
.
adduser johndoe --gecos "John Doe"
usermod -aG sudo johndoe
su - johndoe
OBS : Ersätt johndoe
med ditt användarnamn.
Ställ in tidszonen.
sudo dpkg-reconfigure tzdata
Se till att ditt Ubuntu-system är uppdaterat.
sudo apt update && sudo apt upgrade -y
Installera nödvändiga paket.
sudo apt install -y git wget curl socat
Installera Nginx
Installera Nginx webbserver.
sudo apt install -y nginx
Kontrollera versionen.
sudo nginx -v
# nginx version: nginx/1.15.9 (Ubuntu)
Installera Python och Lexicon
Som ett första steg i processen att skaffa jokerteckencertifikat från Let's Encrypt med hjälp av acme.sh och Vultr API, måste du installera Python och Lexicon . Lexicon är ett Python-paket som ger ett sätt att manipulera DNS-poster på flera DNS-leverantörer på ett standardiserat sätt.
Installera Python om det inte redan är installerat på ditt system.
sudo apt install -y python3
Bekräfta installationen genom att verifiera versionen.
python3 --version
# Python 3.7.3
Installera Lexicon-verktyget. Ett lexikon är ett Python-verktyg som låter dig manipulera DNS-poster på olika DNS-leverantörer på ett standardiserat sätt.
sudo apt install -y lexicon
Kontrollera Lexicon-versionen.
lexicon --version
# lexicon 3.0.8
Installera acme.sh
klient
Acme.sh
är en ACME-protokollklient skriven enbart i Shell-språk (Unix-skal) som automatiserar processen att få ett signerat certifikat via Let's Encrypt. Den stöder ACME v1 och ACME v2, och viktigast av allt stöder den ACME v2 jokertecken-certifikat. I det här avsnittet installerar vi ett Acme.sh-skript.
OBS: Det rekommenderas att använda root
användaren för att installera acme.sh
, även om det inte kräver root
/ sudo
åtkomst.
Byt till root
användare från den vanliga användaren om du har skapat den.
sudo su - root
Ladda ner och installera acme.sh
.
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install --accountemail "[email protected]"
source ~/.bashrc
cd
Kontrollera versionen.
acme.sh --version
# v2.8.2
Skaffa jokerteckencertifikat från Let's Encrypt
För att få ett jokerteckencertifikat kan vi endast använda DNS-valideringsmetoden. Vi använder Lexicon och Vultr DNS API för att manipulera TXT DNS-poster.
Skaffa RSA- och ECC-jokerteckencertifikat för din domän.
# 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
OBS : Glöm inte att ersätta example.com
med ditt domännamn och byt ut Vultr API-platshållarvärdena med dina egna.
Efter att ha kört de föregående kommandona finns dina certifikat och nycklar i:
- För RSA:
~/.acme.sh/example.com
katalog.
- För ECC/ECDSA:
~/.acme.sh/example.com_ecc
katalog.
OBS : Du bör inte använda cert-filerna i ~/.acme.sh/
mappen, de är endast för intern användning, katalogstrukturen kan ändras i framtiden.
För att lista dina certifikat kan du köra:
acme.sh --list
Skapa en mapp för att lagra dina certifikat i produktion. Vi använder /etc/letsencrypt
katalog.
sudo mkdir -p /etc/letsencrypt/example.com
sudo mkdir -p /etc/letsencrypt/example.com_ecc
Installera/kopiera certifikat för produktionsanvändning på din 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"
Nu när vi framgångsrikt har erhållit jokerteckencertifikat från Let's Encrypt måste vi konfigurera Nginx webbserver. Alla certifikat förnyas automatiskt var 60:e dag.
Efter att ha erhållit och installerat certifikat på din föredragna plats kan du logga ut från root
användare till en vanlig sudo
användare och fortsätta att hantera din server genom att använda sudo
om det behövs.
exit
Kör sudo vim /etc/nginx/sites-available/example.com.conf
och fyll filen med följande innehåll. Ersätt alla förekomster av example.com
med ditt eget domännamn.
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;
}
Aktivera den nya example.com.conf
konfigurationen genom att länka filen till sites-enabled
katalogen.
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Testa Nginx-konfiguration.
sudo nginx -t
Ladda om Nginx.
sudo systemctl reload nginx.service
Det är allt. Vi distribuerade jokerteckencertifikat till Nginx med hjälp av acme.sh, Lexicon och Vultr API. Wildcard-certifikat kan vara användbara när du vill säkra flera underdomäner på första nivån som genereras dynamiskt.