SSLmentor

Kvalitní TLS/SSL certifikáty pro webové stránky a internetové projekty.

Certbot

Certbot

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.

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 sekci

Vytvoř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 configtest vrací Syntax OK.
  • curl -I http://example.com odpovídá přes HTTP.
  • curl -I https://example.com odpovídá přes HTTPS.
  • certbot certificates zobrazuje očekávaný certifikát.
  • certbot renew --dry-run projde bez chyby.
  • systemctl list-timers | grep certbot ukazuje aktivní certbot.timer.

Zpět na Nápovědu
Našli jste chybu nebo něčemu nerozumíte? Napište nám!

CA Sectigo
CA RapidSSL
CA Thawte
CA GeoTrust
CA DigiCert
CA Certum