SSLmentor

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

Certbot

Certbot

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.

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ť sekciu

Vytvorenie 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 configtest vráti Syntax OK.
  • curl -I http://example.com odpovedá cez HTTP.
  • curl -I https://example.com odpovedá cez HTTPS.
  • certbot certificates zobrazí očakávaný certifikát.
  • certbot renew --dry-run prejde bez chyby.
  • systemctl list-timers | grep certbot zobrazí aktívny certbot.timer.

Späť na Nápovedu
Našli ste chybu alebo niečomu nerozumiete? Napíšte nám!

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