ACME klient Certbot
Detailní návod pro kompletní nasazení DV ACME SSL certifikátu na Debian (Apache) VPS s automatickou obnovou přes výchozí Certbot timer. Nápověda popisuje deployment doménového, případně multidoménového DV certifikátu, například example.com a www.example.com. Pro běžné nasazení doporučujeme používat standardní Certbot adresář /etc/letsencrypt. Díky tomu se obnovy řeší výchozím systémovým timerem certbot.timer.
Návod neřeší hvězdičkové WildCard SSL certifikáty, které vyžadují DNS validaci a pro automatickou obnovu DNS API.
Obsah článku
- Základní pojmy
- Apache, webroot
- Certbot, vystavení certifikátu
- Více certifikátů na jednom serveru
- Více EAB účtů
Základní pojmy
- ACME – Protokol pro automatizované vydávání a obnovu SSL/TLS certifikátů.
- Certbot – ACME klient, který komunikuje s certifikační autoritou a umí nasadit certifikát do Apache.
- kid + hmac – External Account Binding (EAB) údaje od certifikační autority. Propojují Certbot s účtem nebo produktem.
kid a hmac neověřují vlastnictví domény, ACME klienta s CA účtem. Doména se ověřuje samostatně přes ACME challenge. hmac je citlivá hodnota, neposílejte ji veřejně, neukládejte do sdílených návodů. - http-01 – Validace domény přes dočasný soubor dostupný na HTTP adrese domény.
- dns-01 – Validace přes DNS TXT záznam. Nutná pro wildcard certifikáty.
V příkladech je nutné zaměnit vlastní doménu místo example.com.
Apache, webroot
Základní nastavení Apache a domén na serveru.
›› Zobrazit/Skrýt sekciVytvoření samostatného webroot pro doménu a jednoduché testovací stránky. Apache na Debianu standardně používá uživatele www-data.
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
| Příkaz | Co dělá |
|---|---|
apt update |
Aktualizuje seznam balíčků v Debian repozitářích. |
apt install -y apache2 |
Nainstaluje Apache webserver. Parametr -y automaticky potvrdí instalaci. |
systemctl enable --now apache2 |
Zapne Apache po startu serveru a zároveň ho ihned spustí. |
a2enmod rewrite headers ssl |
Zapne běžné Apache moduly pro redirecty, hlavičky a HTTPS. |
systemctl reload apache2 |
Načte konfiguraci Apache bez plného restartu služby. |
Příprava webrootu
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
Vytvoření Apache virtual hostu
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
Aktivace Apache site a HTTP kontrola
Před vydáním certifikátu musí doména odpovídat přes HTTP. To je nutné pro ACME http-01 validaci.
a2ensite $DOMAIN.conf
apache2ctl configtest
systemctl reload apache2
curl -I http://$DOMAIN
curl http://$DOMAIN
Instalace Certbotu + vydání certifikátu
Instalace Certbotu z Debian repozitářů. Balíček python3-certbot-apache umožňuje Certbotu upravit Apache konfiguraci, provést validaci a nasadit vydaný certifikát.
apt install -y certbot python3-certbot-apache
certbot --version
Certbot podporuje celou řadu systémů a webserverů. Doporučujeme zkontrolovat Certbot Instructions s konkrétním postupem pro zvolený webserver.
Registrace ACME účtu
Pro vydání certifikátu je potřeba mít ACME účet u certifikační autority. V tomto návodu použijeme ACME certifikáty od CA Certum.
V detailu objednávky získáte EAB údaje (kid + hmac).
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Parametr | Význam |
|---|---|
--server |
Určuje konkrétní ACME endpoint. Bez tohoto parametru by Certbot používal výchozí 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 pro ACME účet. |
--agree-tos |
Potvrzení podmínek služby. |
--eab-kid |
Identifikátor KID. |
--eab-hmac-key |
Tajný HMAC EAB klíč. |
Vydání ACME certifikátu
certbot --apache \
--server https://acme.certum.pl/directory \
--cert-name $DOMAIN \
-d $DOMAIN \
-d www.$DOMAIN
Parametr --cert-name je důležitý hlavně při více certifikátech na jednom serveru. Každý samostatný certifikát má mít vlastní unikátní název.
Ověření certifikátu a automatické obnovy
certbot certificates
systemctl list-timers | grep certbot
certbot renew --dry-run
curl -I https://$DOMAIN
| Příkaz | Účel |
|---|---|
certbot certificates |
Zobrazí certifikáty spravované Certbotem. |
systemctl list-timers | grep certbot |
Ověří, že běží výchozí automatický timer pro obnovu. |
certbot renew --dry-run |
Simuluje obnovu certifikátu bez výměny produkčního certifikátu. Správný výstup "all simulated renewals succeeded". |
curl -I https://$DOMAIN |
Ověří HTTPS odpověď domény. |
Více certifikátů na jednom serveru
Certbot umí spravovat více certifikátů ve standardním adresáři /etc/letsencrypt. Tento model je pro zákaznické nasazení nejjednodušší, protože využívá výchozí certbot.timer.
- Vytvořte samostatný Apache vhost
Každá doména má mít vlastní soubor v /etc/apache2/sites-available/ a vlastní webroot. - Vydejte certifikát s unikátním --cert-name
Nepoužívejte stejný název certifikátu pro jiný samostatný certifikát. - Ověřte obnovu všech certifikátů
Příkaz certbot renew --dry-run musí projít pro všechny položky v /etc/letsencrypt/renewal/.
Ukázkový příkaz pro další 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
Workaround pro více EAB účtů
U certifikační autority může mít každý produkt vlastní EAB hodnoty. Pokud už je na serveru zaregistrovaný CA ACME účet, další registrace pro stejný ACME server může skončit chybou:
There is an existing account; registration of a duplicate account with this command is currently unsupported.V takové situaci zůstaňte ve standardním /etc/letsencrypt, ale nový účet zaregistrujte přes následující workaround. Po vydání pak použijte konkrétní --account ACCOUNT_ID.
Dočasné odsunutí existujících účtů
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"/ \;
Registrace 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'
Zjištění nového account ID
ls -1 "$ACME_ACCOUNT_DIR"
Výstup tohoto příkazu je nové ACCOUNT_ID. Tuto hodnotu použijte při vydání certifikátu.
Vrácení původních účtů
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
Vydání certifikátu přes konkrétní účet
certbot --apache \
--server https://acme.certum.pl/directory \
--account ACCOUNT_ID \
--cert-name example.net \
-d example.net \
-d www.example.net
| Proč je workaround potřeba | Co řeší |
|---|---|
| Certbot nechce zaregistrovat duplicitní účet pro stejný ACME server. | Dočasné odsunutí účtů umožní registraci nového EAB účtu. |
Na serveru má zůstat standardní /etc/letsencrypt. |
Výchozí certbot.timer pak obnovuje všechny certifikáty bez vlastního cronu. |
| Každý CA produkt může mít vlastní EAB vazbu. | Parametr --account vynutí správný CA účet při vydání. |
Ověřovací checklist
apache2ctl configtestvracíSyntax OK.curl -I http://example.comodpovídá přes HTTP.curl -I https://example.comodpovídá přes HTTPS.certbot certificateszobrazuje očekávaný certifikát.certbot renew --dry-runprojde bez chyby.systemctl list-timers | grep certbotukazuje aktivnícertbot.timer.
Kam dál?
Zpět na Nápovědu
Našli jste chybu nebo něčemu nerozumíte? Napište nám!
