ACME klient Certbot
Podrobný návod na kompletné nasadenie DV ACME SSL certifikátu na Debian (Apache) VPS s automatickou obnovou cez predvolený časovač Certbot. Návod popisuje nasadenie jednodoménového alebo viacdoménového DV certifikátu, napríklad example.com a www.example.com. Pri štandardných nasadeniach odporúčame používať štandardný adresár Certbot /etc/letsencrypt. Obnovu tak zabezpečuje predvolený systémový časovač certbot.timer.
Tento návod sa nezaoberá zástupnými WildCard SSL certifikátmi, ktoré vyžadujú DNS validáciu a DNS API pre automatickú obnovu.
Obsah článku
- Základné pojmy
- Apache, webroot
- Certbot, vydanie certifikátu
- Viac certifikátov na jednom serveri
- Viac EAB účtov
Základné pojmy
- ACME – Protokol na automatizované vydávanie a obnovu SSL/TLS certifikátov.
- Certbot – ACME klient, ktorý komunikuje s certifikačnou autoritou a dokáže nasadiť certifikát do Apache.
- kid + hmac – Prihlasovacie údaje External Account Binding (EAB) od certifikačnej autority. Prepájajú Certbot s účtom alebo produktom.
kid a hmac neoverujú vlastníctvo domény, viažu ACME klienta na účet CA. Doména sa overuje samostatne cez ACME výzvu. hmac je citlivá hodnota — nezdieľajte ju verejne ani ju neukladajte do zdieľaných návodov. - http-01 – Validácia domény cez dočasný súbor dostupný na HTTP adrese domény.
- dns-01 – Validácia cez DNS TXT záznam. Vyžadovaná pre zástupné certifikáty.
V príkladoch nahraďte example.com svojou vlastnou doménou.
Apache, webroot
Základná konfigurácia Apache a domény na serveri.
›› Zobraziť/Skryť sekciuVytvorenie samostatného webroot pre doménu a jednoduchej testovacej stránky. Apache na Debiane predvolene používa používateľa www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Príkaz | Čo robí |
|---|---|
apt update |
Aktualizuje zoznam balíkov z repozitárov Debianu. |
apt install -y apache2 |
Nainštaluje webový server Apache. Parameter -y automaticky potvrdí inštaláciu. |
systemctl enable --now apache2 |
Povolí Apache pri štarte servera a ihneď ho spustí. |
a2enmod rewrite headers ssl |
Povolí bežné moduly Apache pre presmerovania, hlavičky a HTTPS. |
systemctl reload apache2 |
Znovu načíta konfiguráciu Apache bez úplného reštartu služby. |
Príprava webroot
DOMAIN="example.com"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
Vytvorenie virtuálneho hosta Apache
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
Aktivácia stránky Apache a kontrola HTTP
Pred vydaním certifikátu musí doména odpovedať cez HTTP. Vyžaduje sa to pre ACME http-01 validáciu.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Inštalácia Certbot + vydanie certifikátu
Inštalácia Certbot z repozitárov Debianu. Balík python3-certbot-apache umožňuje Certbotu upraviť konfiguráciu Apache, vykonať validáciu a nasadiť vydaný certifikát.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot podporuje širokú škálu systémov a webových serverov. Pre konkrétny postup pre vami zvolený webový server odporúčame skontrolovať Certbot Instructions.
Registrácia ACME účtu
Na vydanie certifikátu potrebujete mať ACME účet u certifikačnej autority. V tomto návode použijeme ACME certifikáty od CA Certum.
EAB prihlasovacie údaje (kid + hmac) získate v detailoch objednávky.
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Parameter | Význam |
|---|---|
--server |
Určuje konkrétny ACME endpoint. Bez tohto parametra by Certbot použil predvolený ACME server. CA DigiCert: https://one.digicert.com/mpki/api/v1/acme/v2/directory CA Sectigo: https://acme.sectigo.com/v2/DV |
--email |
Kontaktný e-mail pre ACME účet. |
--agree-tos |
Súhlas s podmienkami služby. |
--eab-kid |
Identifikátor KID. |
--eab-hmac-key |
Tajný HMAC EAB kľúč. |
Vydanie ACME certifikátu
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Parameter --cert-name je obzvlášť dôležitý pri správe viacerých certifikátov na jednom serveri. Každý jednotlivý certifikát by mal mať svoj vlastný jedinečný názov.
Overenie certifikátu a automatická obnova
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Príkaz | Účel |
|---|---|
certbot certificates |
Zobrazí certifikáty spravované Certbotom. |
systemctl list-timers | grep certbot |
Overí, či beží predvolený časovač automatickej obnovy. |
certbot renew --dry-run |
Simuluje obnovu certifikátu bez nahradenia produkčného certifikátu. Správny výstup: "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Overí HTTPS odpoveď domény. |
Viac certifikátov na jednom serveri
Certbot dokáže spravovať viac certifikátov v štandardnom adresári /etc/letsencrypt. Tento model je najjednoduchší pre zákaznícke nasadenia, pretože využíva predvolený certbot.timer.
- Vytvorte samostatný Apache vhost
Každá doména by mala mať svoj vlastný súbor v /etc/apache2/sites-available/ a svoj vlastný webroot. - Vydajte certifikát s jedinečným --cert-name
Nepoužívajte rovnaký názov certifikátu pre iný jednotlivý certifikát. - Overte obnovu všetkých certifikátov
Príkaz certbot renew --dry-run musí prejsť pre všetky záznamy v /etc/letsencrypt/renewal/.
Vzorový príkaz pre ďalšiu doménu example.net:
DOMAIN="example.net"
mkdir -p /var/www/$DOMAIN/public
chown -R www-data:www-data /var/www/$DOMAIN
chmod -R 755 /var/www/$DOMAIN
echo "OK $DOMAIN" > /var/www/$DOMAIN/public/index.html
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias www.$DOMAIN
DocumentRoot /var/www/$DOMAIN/public
<Directory /var/www/$DOMAIN/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog \${APACHE_LOG_DIR}/${DOMAIN}_error.log
CustomLog \${APACHE_LOG_DIR}/${DOMAIN}_access.log combined
</VirtualHost>
EOF
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN
-d www.$DOMAIN
certbot renew --dry-run
Riešenie pre viac EAB účtov
U certifikačnej autority môže mať každý produkt vlastné EAB hodnoty. Ak je na serveri už zaregistrovaný ACME účet CA, ďalšia registrácia pre rovnaký ACME server môže skončiť chybou:
There is an existing account; registration of a duplicate account with this command is currently unsupported.
V takejto situácii zostaňte v štandardnom /etc/letsencrypt, ale nový účet zaregistrujte pomocou nasledujúceho riešenia. Po vydaní použite konkrétny --account ACCOUNT_ID.
Dočasné presunutie existujúcich účtov
ACME_ACCOUNT_DIR="/etc/letsencrypt/accounts/acme.certum.pl/directory"
BACKUP_DIR="/root/certbot-certum-accounts-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
find "$ACME_ACCOUNT_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$BACKUP_DIR"/ \;
Registrácia nového EAB účtu
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
Zistenie ID nového účtu
ls -1 "$ACME_ACCOUNT_DIR"
Výstupom tohto príkazu je nové ACCOUNT_ID. Túto hodnotu použite pri vydaní certifikátu.
Obnovenie pôvodných účtov
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Vydanie certifikátu cez konkrétny účet
certbot --apache \
--server https://acme.certum.pl/directory \
--account ACCOUNT_ID \
--cert-name example.net \
-d example.net \
-d www.example.net
| Prečo je riešenie potrebné | Čo rieši |
|---|---|
| Certbot odmieta zaregistrovať duplicitný účet pre rovnaký ACME server. | Dočasné presunutie účtov umožní registráciu nového EAB účtu. |
Štandardný /etc/letsencrypt by mal zostať na serveri. |
Predvolený certbot.timer potom obnovuje všetky certifikáty bez vlastného cronu. |
| Každý produkt CA môže mať vlastnú EAB väzbu. | Parameter --account vynúti pri vydávaní správny účet CA. |
Kontrolný zoznam overenia
apache2ctl configtestvrátiSyntax OK.curl -I http://example.comodpovedá cez HTTP.curl -I https://example.comodpovedá cez HTTPS.certbot certificateszobrazí očakávaný certifikát.certbot renew --dry-runprejde bez chyby.systemctl list-timers | grep certbotzobrazí aktívnycertbot.timer.
Kam ďalej?
Späť na Nápovedu
Našli ste chybu alebo niečomu nerozumiete? Napíšte nám!
