Vývojáři webového serveru Nginx oznámili podporu protokolu ACME. Ten používají certifikační autority pro automatizované vystavování a správu certifikátů. V případě Nginx je implementace zavedena v novém modulu ngx_http_acme_module, který poskytuje vestavěné konfigurační volby pro vyžádání, instalaci a obnovování certifikátů. Modul je napsaný v jazyce Rust a zatím je k dispozici pro testování.
Protokol ACME (Automated Certificate Management Environment) je komunikační protokol primárně navržený k automatizaci procesu vydávání, ověřování, obnovování a rušení digitálních certifikátů. Umožňuje klientům komunikovat s certifikační autoritou (CA) bez nutnosti manuálního zásahu, což zjednodušuje nasazení zabezpečených webových stránek a dalších služeb, které využívají protokol HTTPS.
Možnost konfigurovat ACME přímo pomocí voleb v Nginx má výrazně snížit počet chyb zavlečených při ruční správě. Ubudou také závislosti na externích nástrojích, jako je Certbot či ACME.sh. Výhodou je také to, že modul bude k dispozici na všech platformách, kde běží Nginx. Doplňme, že konkurenční Apache má obdobný modul už několik let.
Výběr autority
Správu certifikátu pomocí integrace v Nginx je možné rozdělit do čtyř kroků:
- Nastavení serveru ACME
- Přidělení sdílené paměti
- Konfigurace výzev
- Vydávání a obnovování certifikátů
Prvním a jediným povinným krokem je výběr a nastavení URL pro komunikaci s certifikační autoritou. Do konfigurace Nginx je potřeba připsat příslušné volby:
acme_issuer letsencrypt {
uri https://acme-v02.api.letsencrypt.org/directory;
contact admin@example.com;
state_path /var/cache/nginx/acme-letsencrypt;
accept_terms_of_service;
}
Tím vytvoříme nastavení pro certifikační autoritu námi nazvanou letsencrypt, která má zvolenou URL, můžeme jí předat svůj kontaktní e-mail, nastavit adresář pro ukládání stavových informací a automaticky potvrdit souhlas s podmínkami použití.
Alokace paměti
Implementace také poskytuje nepovinnou volbu acme_shared_zone, která určuje velikost alokované paměti pro ukládání certifikátů, soukromých klíčů a výzvy pro všechny nakonfigurované vydavatele certifikátů. Velikost zóny je ve výchozím nastavení 256 kB, ale lze ji podle potřeby zvětšit.
acme_shared_zone zone=acme_shared:1M;
Odpověď na výzvy
Aktuální implementace podporuje výzvy HTTP-01 k ověření vlastnictví domény. V tomto režimu je autorita vyzvána, aby klientovi pomocí protokolu ACME zaslala náhodnou výzvu. Tu klient vystaví na svém webovém serveru, což následně autorita ověří.
Podpora dalších výzev (TLS-ALPN, DNS –01) je součástí budoucích plánů.
V Nginx to vyžaduje definování služby na portu 80 pro zpracování výzev ACME HTTP-01. Jde o běžnou konfiguraci, jakou už obvykle používáme. Podstatné je, aby webový server poslouchal na portu 80, kam si autorita přijde pro svou odpověď. Pro ostatní dotazy můžeme vrátit nadefinovat, cokoliv je potřeba. Minimalistická konfigurace vypadá například takto:
server {
listen 80;
location / {
return 404;
}
}
Vystavení certifikátu
K automatizaci vydávání a obnově certifikátů použijte volbu acme_certificate v příslušném bloku serveru ve vaší konfiguraci Nginx. Volba vyžaduje seznam identifikátorů (domén), pro které je třeba certifikáty dynamicky vydávat. Seznam identifikátorů lze definovat pomocí volby server_name.
Všimněte si, že za volbou acme_certificate uvádíme námi zvolený název pro dříve nakonfigurovanou autoritu.
server {
listen 443 ssl;
server_name .example.com;
acme_certificate letsencrypt;
ssl_certificate $acme_certificate;
ssl_certificate_key $acme_certificate_key;
ssl_certificate_cache max=2;
}
Pozor na to, že ne všechny hodnoty obvykle přijímané volbou server_name jsou platnými identifikátory. V této počáteční implementaci nejsou podporovány zástupné znaky ani regulární výrazy. Je třeba prostě explicitně vyjmenovat doménová jména, která mají být součástí certifikátu.
Uvedené proměnné $acme_certificate a $acme_certificate_key budou obsahovat certifikát a příslušný soukromý klíč z paměti alokované modulem.
Další informace
Zatím se jedná o úvodní implementaci určenou spíše k testování, ale už teď najdete podrobnosti ke všem volbám v dokumentaci k Nginx. Zdrojový kód naleznete na GitHubu, kde jsou uvedeny i instrukce k sestavení modulu.