Certum WildCard ACME SSL (Certbot + DNS-01)
Návod popisuje ruční vydání hvězdičkového WildCard SSL certifikátu přes ACME klienta Certbot s validací DNS-01. Postup je vhodný pro test nebo jednorázové vydání certifikátu, ne pro plně automatickou obnovu. V návodu je použit ACME certifikát od certifikační autority Certum. Použitý certifikát slouží pouze jako příklad – princip fungování i postup nasazení ACME jsou stejné u všech certifikačních autorit.
Obsah článku
- Certum ACME účet
- Vydání certifikátu
- Apache, webroot, nasazení certifikátu
- Renew a omezení ručního postupu
- Ověřovací checklist
Základní pojmy
- WildCard SSL – certifikát pro subdomény, například
*.example.com. - Apex doména – samotná doména
example.com. Wildcard ji nepokrývá, proto se do certifikátu přidává zvlášť. - DNS-01 – validace přes TXT záznam
_acme-challenge.example.com. - EAB kid + hmac – External Account Binding (EAB) údaje od certifikační autority. Propojují Certbot s účtem nebo produktem.
V příkladech nahraďte example.com vlastní doménou.
Certbot v režimu --manual --preferred-challenges dns-01 neumí bez další automatizace sám měnit DNS TXT záznamy při RENEW. Pro produkční automatickou obnovu wildcard certifikátů doporučujeme například ACME klienta Lego s DNS API.
Registrace Certum ACME účtu
Pokud na serveru ještě není zaregistrovaný odpovídající Certum ACME účet, použijte přidělené EAB údaje. Před spuštěním nahraďte certum@example.com vlastním kontaktním e-mailem, KID hodnotou KID a HMAC tajným HMAC klíčem.
certbot register \
--server https://acme.certum.pl/directory \
--email certum@example.com \
--agree-tos \
--eab-kid 'KID' \
--eab-hmac-key 'HMAC'
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
certbot register |
Zaregistruje ACME účet. |
--server |
Certum ACME endpoint. |
--email |
Kontaktní e-mail. |
--agree-tos |
Souhlas s podmínkami. |
--eab-kid / --eab-hmac-key |
EAB údaje. |
Workaround pro více Certum EAB účtů
›› Zobrazit/Skrýt sekciPokud Certbot odmítne registraci dalšího účtu pro stejný ACME server, dočasně odsuňte existující account adresáře, zaregistrujte nový účet a původní účty vraťte zpět. V registračním příkazu níže opět nahraďte certum@example.com, KID a HMAC vlastními hodnotami.
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"/ \;
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
ACME_ACCOUNT_DIR |
Adresář s Certum ACME účty Certbotu. |
BACKUP_DIR |
Dočasná záloha existujících účtů. |
find ... mv |
Dočasně přesune existující účty mimo hlavní adresář. |
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 a vrácení původních účtů:
ls -1 "$ACME_ACCOUNT_DIR"
find "$BACKUP_DIR" -mindepth 1 -maxdepth 1 -type d -exec mv {} "$ACME_ACCOUNT_DIR"/ \;
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
ls -1 "$ACME_ACCOUNT_DIR" |
Vypíše nově vytvořené account ID. |
find "$BACKUP_DIR" ... mv |
Vrátí původní účty zpět. |
Vydání wildcard certifikátu
V CertManageru musí být deklarované obě domény: example.com i *.example.com. Před spuštěním nahraďte ACCOUNT_ID_Z_CERTBOTU ID účtu z výpisu Certbotu, example.com vlastní apex doménou a *.example.com wildcard doménou. Pokud používáte jen jeden správný ACME účet, lze parametr --account vynechat.
ACCOUNT_ID="ACCOUNT_ID_Z_CERTBOTU"
certbot certonly \
--manual \
--preferred-challenges dns-01 \
--server https://acme.certum.pl/directory \
--account "$ACCOUNT_ID" \
--cert-name example.com-wildcard \
-d example.com \
-d '*.example.com'
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
ACCOUNT_ID |
ID Certbot účtu, pokud je potřeba vybrat konkrétní účet. |
certbot certonly |
Vydá certifikát bez automatické úpravy Apache. |
--manual |
Ruční validace. |
--preferred-challenges dns-01 |
Vynutí DNS TXT validaci. |
--cert-name |
Název certifikátu v Certbotu. |
-d |
Domény v certifikátu. |
Hodnota --cert-name example.com-wildcard určuje název certifikátu v Certbotu. Doporučujeme ji upravit podle názvu vlastní domény.
DNS TXT záznamy
Certbot vypíše hodnoty, které je nutné vložit do DNS. Pro apex i wildcard může být potřeba zadat dva TXT záznamy se stejným názvem.
_acme-challenge.example.com TXT "HODNOTA_1_OD_CERTBOTU"
_acme-challenge.example.com TXT "HODNOTA_2_OD_CERTBOTU"
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
_acme-challenge.example.com |
Název TXT záznamu pro ACME DNS-01 validaci. |
HODNOTA_1 / HODNOTA_2 |
Přesné hodnoty zobrazené Certbotem. Obě musí být v DNS současně. |
Obě hodnoty musí existovat současně. Nestačí jednou hodnotou nahradit druhou. U běžného hostingu počítejte přibližně s 30 až 60 minutami propagace záznamů do internetu.
dig TXT _acme-challenge.example.com +short
V dalším kroku ověříte, že jsou obě TXT hodnoty skutečně viditelné v DNS. Do té doby v Certbotu nepotvrzujte pokračování.
Kontrola DNS záznamů
Jakmile zadáte TXT hodnoty do DNS, ověřte jejich viditelnost nástrojem dig. Až když se vrací obě hodnoty, pokračujte v běžícím Certbot procesu. Před použitím příkazu nahraďte example.com vlastní doménou.
apt-get install dnsutils
dig TXT _acme-challenge.example.com +short
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
apt-get install dnsutils |
Nainstaluje nástroj dig. |
dig TXT _acme-challenge... |
Ověří TXT záznamy pro DNS-01 validaci. |
Apache, webroot
Apache není použitý pro validaci wildcard certifikátu, ale je potřeba pro provoz webu a následné nasazení certifikátu.
›› Zobrazit/Skrýt sekciPřed spuštěním nahraďte hodnotu example.com v řádku DOMAIN="example.com" vlastní doménou bez hvězdičky. Proměnná $DOMAIN se použije pro webroot, Apache vhost a testovací stránku.
cd /var/www
apt update
apt install -y apache2
systemctl enable --now apache2
a2enmod rewrite headers ssl
systemctl reload apache2
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
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
cd /var/www |
Přejde do adresáře pro webové soubory. |
apt update / apt install |
Aktualizuje balíčky a nainstaluje Apache. |
systemctl enable --now apache2 |
Zapne a spustí Apache. |
DOMAIN="example.com" |
Nastaví vlastní doménu pro další příkazy. |
mkdir/chown/chmod/echo |
Připraví webroot, práva a testovací stránku. |
Vytvoření Apache HTTP virtual hostu
cat > /etc/apache2/sites-available/$DOMAIN.conf <<EOF
<VirtualHost *:80>
ServerName $DOMAIN
ServerAlias *.$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
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
cat > ... <<EOF |
Vytvoří Apache HTTP vhost. |
ServerName / ServerAlias |
Nastaví hlavní doménu a případné subdomény pro HTTP vhost. |
DocumentRoot |
Určuje adresář webu. |
a2ensite |
Zapne vhost. |
apache2ctl configtest |
Ověří konfiguraci. |
curl -I |
Ověří HTTP odpověď. |
Nasazení certifikátu do Apache
Před vytvořením HTTPS vhostu nahraďte example.com vlastní doménou ve jménu souboru, hodnotách ServerName, ServerAlias, cestách k webrootu i cestách k certifikátu. Cesta v SSLCertificateFile musí odpovídat hodnotě --cert-name z předchozího kroku.
cat > /etc/apache2/sites-available/example.com-le-ssl.conf <<'EOF'
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName example.com
ServerAlias *.example.com
DocumentRoot /var/www/example.com/public
<Directory /var/www/example.com/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com-wildcard/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com-wildcard/privkey.pem
ErrorLog ${APACHE_LOG_DIR}/example.com_ssl_error.log
CustomLog ${APACHE_LOG_DIR}/example.com_ssl_access.log combined
</VirtualHost>
</IfModule>
EOF
a2ensite example.com-le-ssl.conf
apache2ctl configtest
systemctl reload apache2
curl -I https://example.com
curl -I https://test.example.com
| Příkaz / hodnota | Co dělá / čím nahradit |
|---|---|
cat > ...-le-ssl.conf |
Vytvoří Apache HTTPS vhost. |
ServerName / ServerAlias |
Svazuje HTTPS vhost s apex doménou a wildcard subdoménami pokrytými certifikátem. |
SSLCertificateFile |
Cesta k fullchain certifikátu Certbotu. |
SSLCertificateKeyFile |
Cesta k privátnímu klíči Certbotu. |
a2ensite / reload |
Zapne vhost a načte konfiguraci. |
curl -I https://... |
Ověří HTTPS odpověď. |
Renewal a omezení ručního postupu
Certifikát vydaný přes ruční DNS-01 validaci není vhodný pro bezobslužné AUTORENEW, protože při každé obnově vzniknou nové TXT hodnoty. Certbot je nebude umět sám zapsat do DNS bez hooku nebo DNS API integrace.
Pro produkční WildCard ACME SSL doporučujeme navazující návod ACME klient Lego + API DNS, kde Lego vytváří TXT záznamy přes webhostingové WAPI automaticky.
Ověřovací checklist
apache2ctl configtestvracíSyntax OK.certbot certificateszobrazujeexample.com-wildcard.- V DNS byly během validace zadané obě TXT hodnoty.
curl -I https://example.comodpovídá přes HTTPS.- Je zdokumentováno, že tento postup nemá plně automatický renewal.
Kam dál?
Zpět na Nápovědu
Našli jste chybu nebo něčemu nerozumíte? Napište nám!
