Serverový certifikát - Let's Encrypt (Apache2 mod md)
| Serverový certifikát – Let's Encrypt pro Apache2 (mod_md) |
| Připravený skript nakonfiguruje modul mod_md webového serveru Apache2 tak, aby si certifikáty od Let's Encrypt vydával a obnovoval zcela automaticky – bez externího ACME klienta a bez démona navíc. |
| Certifikační autorita | Let's Encrypt (certifikát s doménovým ověřením, platnost 90 dní) |
|---|---|
| Pro koho | Správci webového serveru Apache2 na systému Debian (deriváty Debianu a Ubuntu netestovány) |
| Automatická obnova | Ano – zajišťuje přímo modul mod_md, Apache se po obnově sám reloadne |
| Zdroj skriptu | ipmil.civ.zcu.cz/linux/apache2-mod_md |
Co skript udělá
Skript md.sh po spuštění:
- projde konfigurace v
/etc/apache2/sites-enabled/a posbírá všechna jména z direktivServerNameaServerAlias, - u každého jména ověří, že jeho DNS záznam směřuje na tento server (jména, která nesměřují, vynechá),
- povolí moduly
mdassla vygeneruje konfiguraci/etc/apache2/conf-available/md-zcu.conf, - zakomentuje případné staré direktivy
SSLCertificateFile/SSLCertificateKeyFile/SSLCertificateChainFilev dotčených konfiguracích (před úpravou vytvoří zálohu*.bak_<datum>), - nainstaluje hook skript
/opt/mod_md/md-message.sh, který při obnově certifikátu dočasně otevře port 80 v iptables a po instalaci certifikátu provedeapache2ctl graceful, - provede test konfigurace a reload/restart Apache.
Logy najdete v adresáři /var/log/mod_md/.
Důležité: Skript získává certifikáty pro všechny stránky v adresáři sites-enabled.
Požadavky před spuštěním
- V adresáři
/etc/apache2/sites-enabled/jsou nakonfigurovány všechny stránky, pro které chcete certifikát získat. - Každá konfigurace obsahuje všechny direktivy
ServerNameaServerAliasodpovídající doméně a jejím aliasům. - Alespoň v jedné konfiguraci ve
VirtualHost *:443je nastaven platný e-mail v direktivěServerAdmin(např.admin@civ.zcu.cz). - DNS záznamy všech jmen směřují na tento server a server je z internetu dostupný na portu 80.
Pozor: Pokud jsou SSL direktivy (SSLCertificateFile apod.) definovány mimo konfigurace v sites-enabled, skript je nenajde. V takovém případě je zakomentujte ručně, jinak konfigurace Apache skončí chybou.
Postup
1. Stažení skriptu
git clone https://ipmil.civ.zcu.cz/linux/apache2-mod_md.git cd apache2-mod_md chmod +x md.sh
Skript musí běžet jako root – zapisuje do konfigurace Apache, do /opt/mod_md i do /etc/sudoers.d/. Bez oprávnění root skončí hláškou Skript musí být spuštěn jako root!.
2. Test se STAGING certifikátem
Nejprve spusťte skript v testovacím režimu:
sudo ./md.sh -t
Testovací režim používá testovací ACME API Let's Encrypt (acme-staging-v02.api.letsencrypt.org). Vydaný STAGING certifikát není důvěryhodný pro produkční provoz, ale ověříte si s ním správnost konfigurace bez rizika vyčerpání limitů Let's Encrypt na vydávání certifikátů.
Úspěch ověříte kontrolou certifikátu webové stránky – uvidíte vydavatele ve tvaru (STAGING) Counterfeit Cashew R10 nebo podobnou testovací podobu.
3. Nasazení produkčního certifikátu
Po ověření STAGING certifikátu spusťte skript bez parametru:
sudo ./md.sh
Skript sám odstraní data STAGING certifikátů a mod_md vydá certifikáty produkční. Vydání může po reloadu Apache chvíli trvat (obvykle do několika minut) – průběh sledujte v logu /var/log/mod_md/apache2-md-message.log.
4. Ověření certifikátu a stará cache v prohlížeči
Pozor na cache prohlížeče: pokud jste si stránku prohlíželi se STAGING certifikátem, může prohlížeč i po přechodu na produkční certifikát chvíli zobrazovat starý STAGING certifikát – drží si otevřené TLS spojení a session cache. Skutečně nasazený certifikát proto ověřte přímo na serveru:
openssl s_client -connect example.zcu.cz:443 -servername example.zcu.cz </dev/null 2>/dev/null \ | openssl x509 -noout -issuer -subject -dates
Pokud příkaz ukazuje produkční certifikát (vydavatel O = Let's Encrypt bez označení STAGING) a prohlížeč stále zobrazuje testovací certifikát, stačí prohlížeč úplně ukončit a spustit znovu, použít anonymní okno či jiný prohlížeč, nebo chvíli vyčkat. Nejde o chybu serveru ani skriptu.
Pokud ale i openssl stále vrací STAGING certifikát, produkční certifikát zatím nebyl aktivován. Zkontrolujte /var/log/apache2/error.log a zapněte podrobnější logování mod_md podle části Řešení potíží. Skript kvůli tomu nespouštějte znovu – opakované žádosti zbytečně čerpají limit Let's Encrypt.
Řešení potíží
Rate limit Let's Encrypt
Produkční certifikáty podléhají limitu: maximálně 5 certifikátů pro stejnou sadu domén za 7 dní (168 hodin). Po vyčerpání limitu je nutné čekat; místa se uvolňují tempem cca 1 certifikát za 34 hodin. Právě proto vždy nejprve testujte s parametrem -t.
V logu se limit projeví chybou urn:ietf:params:acme:error:rateLimited, například:
[md:debug] md_result.c(254): md[example.zcu.cz] while[Creating new order] problem[urn:ietf:params:acme:error:rateLimited] detail[too many certificates (5) already issued for this exact set of domains in the last 168h0m0s, retry after 2025-02-19 23:09:59 UTC: see https://letsencrypt.org/docs/rate-limits/]
Rozhodující je údaj za retry after – je to okamžik, kdy bude možný další pokus. V ukázce byla chyba zapsána 18. 2. 2025 ve 14:31 UTC a další žádost šla podat až 19. 2. 2025 ve 23:09 UTC, tedy přibližně o 34 hodin později.
Podrobnosti: letsencrypt.org/docs/rate-limits.
Podrobnější logování mod_md
Do souboru /etc/apache2/apache2.conf přidejte:
LogLevel md:debug
(případně LogLevel md:trace5 pro maximální podrobnost) a sledujte /var/log/apache2/error.log.
Alternativa: certbot bez mod_md
Pokud neprovozujete Apache2, nebo dáváte přednost klasickému klientovi, lze certifikát od Let's Encrypt získat i nástrojem certbot (na Debianu stačí apt install certbot):
certbot certonly --standalone -d example.zcu.cz -m vas-email@zcu.cz --agree-tos
Režim --standalone vyžaduje volný port 80 (běžící webový server na chvíli zastavte, nebo místo toho použijte --webroot -w /var/www/html). Certifikát a klíč najdete v /etc/letsencrypt/live/example.zcu.cz/, obnovu zajišťuje automaticky systemd timer certbot.timer.
Chcete-li však certifikát s ověřením organizace, použijte raději doporučenou ACME automatizaci přes CESNET TCS.
Související stránky
- Získání serverového certifikátu – rozcestník metod
- Serverový certifikát - CESNET TCS (ACME automatizace) – doporučená automatizace s ověřením organizace
- Serverový certifikát - CESNET TCS (jednorázová žádost) – ruční žádost