Hlavní navigace

ACME.sh: snadná cesta k certifikátu od Let's Encrypt

Petr Krčmář

Klientů pro Let's Encrypt už vznikla celá řada, představíme si jeden napsaný v shellu, který je asi nejpříjemnější z nich: nemá žádné závislosti, umí vše a nasadíte ho okamžitě.

Autor tohoto článku je velkým podporovatelem Let's Encrypt a už vyzkoušel celou řadu různých klientů. Bohužel většina z nich mu nevyhovovala – buď měly ohromné množství závislostí (typicky v Pythonu), neměly implementovány všechny funkce (typicky revokace) nebo třeba nestahovaly mezilehlé certifikáty (viz přechod na nové mezilehlé X3). Žádný z klientů prostě nebyl dokonalý. Až autor narazil na ACME.sh (dříve LE.sh) a už u něj zůstal.

Projekt ACME.sh vytváří plnohodnotného klienta pro Let's Encrypt, který je kompletně napsán v shellu (je kompatibilní se shelly Bash, Dash a sh). Z toho plyne celá řada zajímavých vlastností: nemá to žádné významné závislosti (knihovny, frameworky…), triviálně se to instaluje (stačí stáhnout jeden soubor) a běží to všude, kde máte kompatibilní shell a pár běžných konzolových utilit. Navíc si vývojář klade za cíl implementaci všech funkcí protokolu ACME, takže se nemusíte bát, že by váš klient neuměl třeba revokace certifikátů.

Instalace

Instalovat je možné několika způsoby. Tradičně je to naklonováním repozitáře z Gitu a spuštěním samotného skriptu:

$ git clone https://github.com/Neilpang/acme.sh.git
$ cd ./acme.sh
$ ./acme.sh --install

Druhou variantou je sub-projekt get.acme.sh (GitHub), který servíruje triviální instalační skript. Ten se postará o přímé stažení hlavního skriptu ACME.sh a jeho spuštění. Stačí pak udělat následující:

$ curl https://get.acme.sh | sh

nebo

$ wget -O -  https://get.acme.sh | sh

V každém případě se nedoporučuje instalovat jako root a ani to vlastně není potřeba. Ideální je vytvořit samostatného uživatele (třeba letsencrypt), který nebude mít žádná privilegia a bude sloužit jen k získávání certifikátů.

Pokud je skript spuštěn s parametrem --install, založí si adresářovou strukturu v ~/.acme.sh/, vytvoří účet u Let's Encrypt (pár klíčů) a nainstaluje si cronjob pro pravidelné obnovování certifikátů. Ten vypadá takto:

0 0 * * * "/home/letsencrypt/.acme.sh"/acme.sh --cron --home "/home/letsencrypt/.acme.sh" > /dev/null

Poznámka: Pokud se vám nelíbí, kam a jak se skript nainstaluje, můžete mu při instalaci předávat parametry jako --home, --certhome, --accountconf a další.

Úprava web serveru

Nejobvyklejší metodou ověření identity je použití web root, kdy skriptu ukážete, do jakého adresáře má ukládat výzvy pro autoritu. Ta si pak na ověřované doméně sáhne do /.well-known/ a výzvy tam hledá. Pravděpodobně nechcete skriptu dávat přístup do skutečného web rootu, stačí proto do konfigurace web serveru přidat informaci o tom, kde se skutečně adresář nachází.

V Nginx stačí přidat následující:

location ^~ /.well-known/ {
    root /home/letsencrypt/webroot/;
}

Pro Apache pak podobně:

Alias /.well-known/ /home/letsencrypt/webroot/.well-known/
<Directory /home/letsencrypt/webroot/>
    AllowOverride None
    Require all granted
    Satisfy Any
</Directory>

Pokud je podobná konfigurace doručena automaticky pro všechny weby, je práce vyřešena a můžeme začít generovat certifikáty. Pozor na to, že web server musí mít právo na čtení obsahu tohoto adresáře. Doporučuji to vyzkoušet nějakým běžným souborem, který si zkusíte z webu stáhnout.

Poznámka: Pokud nechcete nebo nemůžete použít metodu web root, můžete sáhnout po metodě DNS, která ale vyžaduje interakci (manuální či automatickou) s DNS serverem. Skript disponuje DNS API různých služeb, případně si můžete napsat vlastní.

Žádáme o certifikát

Použití skriptu je pak už poměrně přímočaré, v parametrech stačí vyjmenovat správné domény a cestu pro uložení výzev. Z praktických důvodů je dobré ještě do parametrů přidat příkaz, kterým donutíme web server znovu načíst certifikáty. V takovém případě pak při automatickém obnovení server vše bez střihu vymění a jede se dál.

Konkrétní příkaz bude vypadat takto:

$ .acme.sh/acme.sh --issue -d example.com  -w /home/letsencrypt/webroot/ \
-d www.example.com -d blog.example.com -d forum.example.com \
--reloadcmd "sudo /etc/init.d/nginx reload"

Aby příkaz pro reload serveru fungoval, je potřeba přidat uživateli právo jej spouštět. Jako root tedy spustíme:

# visudo

Přidáme řádek:

letsencrypt     ALL = NOPASSWD:/etc/init.d/nginx reload

Nyní skript po každém generování certifikátu (každé tři měsíce) informuje web server, že si má znovu načíst konfiguraci.

Když nemám web server

Obvykle se certifikát získává kvůli web serveru, ale není to jediná možnost. Můžete mít třeba poštovní, XMPP nebo jiný server, na kterém web není spuštěn. Přesto pro něj chcete získat důvěryhodný certifikát. Na to skript také myslí a umí pomocí utility nc (netcat) simulovat chování web serveru jen pro chvíli ověření výzev od autority. Tady už ale budete potřebovat práva roota nebo alespoň práva poslouchání na portu 80.

Příkaz je pak velmi podobný:

$ .acme.sh/acme.sh --issue -d example.com --standalone -d www.example.com

Kde jsou moje certifikáty?

Ve výchozím stavu se váš certifikát, mezilehlý certifikát, řetězec i vygenerovaný privátní klíč objeví v adresáři ~/.acme.sh/example.com. Konkrétně vás (a hlavně váš server) budou zajímat soubory fullchain.cer s vaším i mezilehlým certifikátem a example.com.key s privátním klíčem. Tyto soubory je nutné vložit do konfigurace vašeho serveru.

Nginx:

ssl_certificate /home/letsencrypt/.acme.sh/example.com/fullchain.cer;
ssl_certificate_key /home/letsencrypt/.acme.sh/example.com/example.com.key;

Apache:

SSLCertificateFile /home/letsencrypt/.acme.sh/example.com/example.com.cer
SSLCertificateKeyFile /home/letsencrypt/.acme.sh/example.com/example.com.key
SSLCACertificateFile /home/letsencrypt/.acme.sh/example.com/ca.cer

Ve stejném adresáři se ještě nacházejí konfigurační soubory example.com.conf a example.com.ssl.conf, kam si skript uložil informace vámi zadané v parametrech. Právě tady pak hledá, kdy a jak má obnovovat certifikáty, které mají vypršet.

Revokace

Pokud chcete certifikát revokovat, budete potřebovat buď jeho privátní klíč nebo privátní klíč ke svému účtu. Minimálně ten druhý (soubor ~/.acme.sh/account.key) je dobré mít zálohovaný někde mimo, abyste v případě problémů či ztráty informací na serveru mohli revokaci provést. Pokud alespoň jeden z klíčů máte, stačí následující krok:

$ .acme.sh/acme.sh --revoke -d example.com

Další čtení

Všechny informace jsou dostupné na GitHubu projektu a na jeho wiki.

Našli jste v článku chybu?

28. 6. 2016 8:06

Spider (neregistrovaný)

Tuhle prasarnu je videt v posledni dobe opravdu casto, asi maji vsichni pocit, ze kdyby si ten skript nejdriv stahli, zkontrolovali, a pak spustili, tak by snad zneuctili disk ci co :-(

28. 6. 2016 7:36

crow (neregistrovaný)

Článek je super ALE musím si rýpnout.

curl ... | sh - vazne?

Tohle je doopravdy nebezpecnejsi nez se muze na prvni pohled zdat [1].

[1]: https://news.ycombinator.com/item?id=11532599

Vitalia.cz: To nejhorší při horečce u dětí: Febrilní křeče

To nejhorší při horečce u dětí: Febrilní křeče

DigiZone.cz: SES zajistí HD pro M7 Group

SES zajistí HD pro M7 Group

DigiZone.cz: V Plzni odstartovalo Radio 1

V Plzni odstartovalo Radio 1

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Vitalia.cz: Nejlepší obranou při nachlazení je útok

Nejlepší obranou při nachlazení je útok

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Exekuční poradna: ptejte se online

Exekuční poradna: ptejte se online

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?