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

Petr Krčmář 28. 6. 2016

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.

widgety

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?
Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

DigiZone.cz: Další programatické formáty

Další programatické formáty

120na80.cz: Zlepšete si kondici s kořenem z Dálného východu

Zlepšete si kondici s kořenem z Dálného východu

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Podnikatel.cz: Kalousek chce odklad EET. Předvolební tah?

Kalousek chce odklad EET. Předvolební tah?

Lupa.cz: Další Češi si nechali vložit do těla čip

Další Češi si nechali vložit do těla čip

Podnikatel.cz: Dva měsíce na EET. Budou stačit?

Dva měsíce na EET. Budou stačit?

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

DigiZone.cz: Samsung EVO-S: novinka pro Skylink

Samsung EVO-S: novinka pro Skylink

Vitalia.cz: 5 pravidel proti infekci močových cest

5 pravidel proti infekci močových cest

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

Vitalia.cz: Jak Ondra o astma přišel

Jak Ondra o astma přišel

120na80.cz: Hrbatá prsa aneb mýty o implantátech

Hrbatá prsa aneb mýty o implantátech

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků