Aan de slag met acme.sh Let’s Encrypt SSL cliënt
Acme.sh is een eenvoudige, krachtige en gemakkelijk te gebruiken ACME protocol client, zuiver geschreven in Shell (Unix shell) taal, compatibel metbash, dash, en sh shells. Het helpt bij het beheren van installatie, vernieuwing en intrekking van SSL certificaten. Het ondersteunt ACME versie 1 en ACME versie 2 protocollen, en ook ACME v2 wildcard certificaten. Omdat het een ACME cliënt zonder afhankelijkheden is, is het nog beter. Je hoeft niet het hele internet te downloaden en te installeren om het te laten werken. Het gereedschap vereist geen root of sudo toegang, maar het is aan te raden om root te gebruiken.
Acme.sh ondersteunt de volgende validatiemethoden die je kunt gebruiken om domeineigendom te bevestigen:
- Webroot modus
- Standalone modus
- Standalone tls-alpn modus
- Apache modus
- Nginx modus
- DNS modus
- DNS alias modus
- Stateloze modus
Wat is Let’s Encrypt
Let’s Encrypt (LE) is een certificaatautoriteit (CA) die gratis en geautomatiseerde SSL/TLS certificaten aanbiedt, met als doel het hele web te versleutelen. Als je een domeinnaam bezit en shell toegang hebt tot je server kun je Let’s Encrypt gebruiken om gratis een vertrouwd certificaat te verkrijgen. Let’s Encrypt kan SAN certs uitgeven voor maximaal 100 hostnamen en wildcard certificaten. Alle certs zijn geldig voor de periode van 90 dagen.
Acme.sh gebruik en basiscommando’s
In dit gedeelte laat ik enkele van de meest voorkomende acme.sh commando’s en opties zien.
Acme.sh installatie
Je hebt een paar mogelijkheden om acme.sh te installeren.
Installeer vanaf het web via curl
of wget
:
curl https://get.acme.sh | sh
source ~/.bashrc
of
wget -O - https://get.acme.sh | sh
source ~/.bashrc
Installeervanaf GitHub:
curl https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
of
wget -O - https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh | INSTALLONLINE=1 sh
Git klonen en installeren:
git clone https://github.com/Neilpang/acme.sh.git
cd ./acme.sh
./acme.sh --install
source ~/.bashrc
Het installatieprogramma voert 3 acties uit:
- Maak en kopieer
acme.sh
naar je home dir ($HOME
):~/.acme.sh/
. Alle certs worden ook in deze map geplaatst. - Maak alias voor:
acme.sh=~/.acme.sh/acme.sh
. - Maak een dagelijkse cron job om de certs te controleren en zo nodig te vernieuwen.
Geavanceerde installatie:
git clone https://github.com/Neilpang/acme.sh.git
cd acme.sh
./acme.sh --install \
--home ~/myacme \
--config-home ~/myacme/data \
--cert-home ~/mycerts \
--accountemail "[email protected]" \
--accountkey ~/myaccount.key \
--accountconf ~/myaccount.conf \
--useragent "this is my client."
Je hoeft niet alle opties in te stellen, stel alleen die in die je belangrijk vindt.
Opties uitgelegd:
--home
is een aangepaste map omacme.sh
in te installeren. Standaard installeert het in~/.acme.sh.
--config-home
is een beschrijfbare map, acme.sh zal alle bestanden (ook cert/sleutels, configs) daarheen schrijven. Standaard staat het in--home.
--cert-home
is een aangepaste dir om de certs die je uitgeeft in op te slaan. Standaard wordt die opgeslagen in--config-home
.--accountemail
is het e-mail adres dat gebruikt werd om je account bij Let's Encrypt te registreren, je ontvangt hier een e-mail met de aankondiging van verlenging. Standaard is het leeg.--accountkey
is het bestand dat de privé sleutel van je account bewaart. Standaard wordt het opgeslagen in--config-home
.--useragent
is de user-agent header waarde die gebruikt wordt om naar Let's Encrypt te sturen.
Als de installatie voltooid is, kun je die controleren door acme.sh
versie te controleren:
acme.sh --version
# v2.8.1
Het programma heeft een heleboel commando's en parameters die gebruikt kunnen worden. Om hulp te krijgen kun je uitvoeren:
acme.sh --help
Geef een SSL cert uit
Als je al een webserver hebt draaien, moet je de webroot modus gebruiken.Je hebt schrijftoegang nodig tot de web root map. Hier zijn enkele voorbeeld commando's die gebruikt kunnen worden om cert via webroot modus te verkrijgen:
Enkel domein + Webroot modus:
acme.sh --issue -d example.com --webroot /var/www/example.com
Meerdere domeinen in hetzelfde cert + Webroot mode:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com
Enkel domein ECC/ECDSA cert + Webroot mode:
acme.sh --issue -d example.com --webroot /var/www/example.com --keylength ec-256
Meerdere domeinen in hetzelfde ECC/ECDSA cert + Webroot mode:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --webroot /var/www/example.com --keylength ec-256
Geldige waarden voor --keylength
zijn: 2048 (standaard), 3072, 4096, 8192 of ec-256, ec-384.
Heb je geen webserver, misschien zit je op een SMTP of FTP server, is de 80 poort vrij, dan kun je de stand-alone modus gebruiken . Als je deze modus wilt gebruiken, moet je eerst socat tools installeren.
Enkel domein + Standalone modus:
acme.sh --issue -d example.com --standalone
Meerdere domeinen in dezelfde cert+ Standalone modus:
acme.sh --issue -d example.com -d www.example.com -d mail.example.com --standalone
Als je geen webserver hebt, misschien zit je op een SMTP of FTP server, dan is de 443poort vrij. Je kunt standalone TLS ALPN modus gebruiken. Acme.sh heeft een ingebouwde standalone TLS webserver, hij kan op poort 443 luisteren om het cert uit te geven.
Enkel domein + Standalone TLS ALPN modus:
acme.sh --issue -d example.com --alpn
Meerdere domeinen in hetzelfde cert + Standalone TLS ALPN modus:
acme.sh --issue -d example.com -d www.example.com --alpn
Automatische DNS API integratie
Als je DNS provider een API heeft, kan acme.sh de API gebruiken om automatisch het DNS TXT record voor je toe te voegen. Je cert wordt automatisch uitgegeven en vernieuwd. Handmatig werk is niet nodig. Configureer voordat je de certs aanvraagtje API sleutels en E-mail. Momenteel heeft acme.sh automatische DNS integratie met ongeveer 60 DNS aanbieders en kan het Lexicon gereedschap gebruiken voor degenen die niet automatisch ondersteund worden.
Enkel domein + CloudFlare DNS API modus:
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="[email protected]"
acme.sh --issue -d example.com --dns dns_cf
Wildcard cert + CloudFlare DNS API modus:
export CF_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export CF_Email="[email protected]"
acme.sh --issue -d example.com -d '*.example.com' --dns dns_cf
Als je DNS provider geen API toegang ondersteunt, kun je het TXT record handmatig toevoegen.
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
Je zou een uitvoer als hieronder moeten krijgen:
Add the following txt record:
Domain:_acme-challenge.example.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
Add the following txt record:
Domain:_acme-challenge.www.example.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please add those txt records to the domains. Waiting for the dns to take effect.
Voer dan gewoon opnieuw uit met renew
argument:
acme.sh --renew -d example.com
Bedenk dat dit DNS manuele modus is en dat je je certs niet automatisch kunt vernieuwen. Je zult eigenhandig een nieuw TXT record aan je domein moeten toevoegen als het tijd is om je certs te vernieuwen. Gebruik dus in plaats daarvan de DNS API modus, want die kan geautomatiseerd worden.
Installeer Let's encrypt SSL cert
Nadat cert(s) gegenereerd zijn, wil je waarschijnlijk uitgegeven cert(s) naar de juiste plaats op de schijf installeren/kopiëren. Je moet dit commando gebruiken om de certs naar de doelbestanden te kopiëren, gebruik niet de certs bestanden in de ~/.acme.sh/
map, ze zijn alleen voor intern gebruik, de mappenstructuur kan in de toekomst veranderen. Maak vóór de installatie een zinvolle map om je certificaten in op te slaan. Dat kan bijvoorbeeld /etc/letsencrypt
, /etc/nginx/ssl
of /etc/apache2/ssl
zijn, afhankelijk van je webserversoftware en je eigen voorkeuren om SSL gerelateerde zaken op te slaan.
Apache voorbeeld:
acme.sh --install-cert \
--domain example.com \
--cert-file /path/to/cert/cert.pem \
--key-file /path/to/keyfile/key.pem \
--fullchain-file /path/to/fullchain/fullchain.pem \
--reloadcmd "sudo systemctl reload apache2.service"
Nginx voorbeeld:
acme.sh --install-cert \
--domain example.com \
--cert-file /path/to/cert/cert.pem \
--key-file /path/to/keyfile/key.pem \
--fullchain-file /path/to/fullchain/fullchain.pem \
--reloadcmd "sudo systemctl reload nginx.service"
De parameters worden opgeslagen in het .acme.sh configuratiebestand, dus je moet het goed hebben voor je systeem, want dit bestand wordt gelezen als de cron job vernieuwing uitvoert. "reloadcmd" is afhankelijk van je besturingssysteem en init systeem.
Vernieuw de Let's Encrypt SSL certs
Jehoeft de certs niet handmatig te vernieuwen. Alle certs worden om de 60 dagen automatisch vernieuwd.
Je kunt echter ook forceren om een cert te vernieuwen:
acme.sh --renew -d example.com --force
of, voor ECC cert:
acme.sh --renew -d example.com --force --ecc
Hoe acme.sh bijwerken
Je kunt acme.sh naar de nieuwste code bijwerken met:
acme.sh --upgrade
Je kunt ook auto upgrade inschakelen:
acme.sh --upgrade --auto-upgrade
Dan wordt acme.sh automatisch bijgehouden.
Dat is het. Als je ergens op vastloopt bezoek dan de acme.sh wiki pagina op https://github.com/Neilpang/acme.sh/wiki.