Důvěryhodné HTTPS certifikáty na řádce pomocí nástroje mkcert

14. 2. 2024
Doba čtení: 3 minuty

Sdílet

 Autor: Depositphotos
Nástroj mkcert slouží k vytváření vytváření lokálně důvěryhodných vývojových certifikátů. Proti OpenSSL nepotřebuje skoro žádnou konfiguraci a zároveň umí pohodlně nainstalovat certifikáty do prohlížeče.

Proč mkcert?

Používat HTTPS je dnes standard a je to dobře. Vedlejším efektem použití HTTPS ale pak je, že moderní prohlížeče často házejí menší či větší klacky pod nohy, když se snažíme připojit na nezabezpečený web.

Některé funkce, jako například geolokace, na nezabezpečených stránkách nefungují vůbec. Některé aplikace také trvají na tom, že musejí být připojeny přes HTTPS, jinak nebudou fungovat. Při vývoji webových aplikací se pak hodí mít nějaké funkční certifikáty, které musí být podepsané nějakou vlastní certifikační autoritou.

Máme-li štěstí, můžeme použít certifikáty získané pomocí Let's Encrypt, ale pokud potřebujeme certifikáty pro lokální vývoj, obvykle si je musíme vytvořit sami, což je trochu otrava.

Lidé se dělí na dva tábory – jedni umějí nakonfigurovat OpenSSL a pak jsou tu ti druzí. Pokud patříte do první skupiny, je to pro vás sice zřejmě už jednoduché, ale stejně to trvá nepříjemně dlouhou dobu. Pokud to neumíte, trvá vám to ještě déle a je to navíc otrava.

Nástroj mkcert  nám tak může výrazně usnadnit práci s lokálními certifikáty. Podobnou službu udělá třeba CFSSL od Cloudflare, Easy-RSA nebo přímo OpenSSL. Ovšem mkcert je výrazně jednodušší a pro běžného vývojáře na jednom počítači je to většinou zcela dostačující.

Instalace mkcert

Dobrá zpráva je, že mkcert je k dispozici jako balíček v Debianu a Ubuntu, takže instalace je jednoduchá. Pro Windows a Fedoru je možné mkcert stáhnout přímo ze stránek projektu.

$ sudo apt install mkcert

První certifikát

Použití mkcert je jednoduché, nemá totiž skoro žádnou konfiguraci. Prostě spustíme:

$ mkcert web.na-mytince.cz

Utilita mkcert vygeneruje certifikát a klíč pro doménu web.na-mytince.cz a uloží je do souborů web.na-mytince.cz.pem, web.na-mytince.cz-key.pem. Certifikát je podepsán privátní certifikační autoritou, kterou si mkcert vytvoří při prvním spuštění.

Je-li potřeba certifikát obsahují více jmen, můžu na příkazové řádce zadat více parametrů.

$ mkcert web.na-mytince.cz blog.na-mytince.cz

Nástroj mkcert umí pracovat i s hvězdičkovými (wildcard) certifikáty, soubor s certifikátem se pak jmenuje _wildcard.na-mytince.cz.pem

$ mkcert "*.na-mytince.cz"

Dokonce můžu vygenerovat i podepsaný certifikát pro IP adresu nebo S/MIME pro použití v e-mailu.

$ mkcert www.na-mytince.cz 127.0.0.1
$ mkcert info@na-mytince.cz

Platnost certifikátu se nedá změnit, je napevno nastavená na dva roky a tři měsíce – tohle magické číslo vychází z limitu 825 dní, který dříve nastavovalo CA/B fórum. Později byla platnost veřejných certifikátů tvůrci operačních systémů snížena dokonce na 398 dnů.

Sériové číslo certifikátu je náhodné, stejně jako náhodný je i klíč. Další užitečné přepínače jsou -client , který vygeneruje certifikát umožňující ověření klienta a -ecdsa , který vygeneruje certifikát obsahující klíče postavené na algoritmech s eliptickou křivkou.

CA – čím se podepisuje

Certifikační autorita se jmenuje mkcert development CA a mkcert si ji generuje při prvním spuštění.

Klíč a certifikát CA jsou uloženy v souborech rootCA-key.pem a rootCA.pem, které se nachází ve výchozím adresáři mkcert. Ten se liší podle operačního systému – na mé Fedoře to je v ~/.local/share/mkcert/, na Windows by to bylo nejspíš $LocalAppData/mkcert.

Pokud se mi výchozí umístění nelíbí, můžeme použít proměnnou prostředí $CAROOT a požádat tím mkcert, aby použil jiný adresář.

Příjemnou vlastností je, že mkcert umí nainstalovat certifikáty CA do vybraných kořenových úložišť jedním příkazem:

$ mkcert -install

Pokud neřeknu jinak (proměnnou prostředí $TRUST_STORES), přidá mkcert  svoji kořenovou certifikační autoritu do kořenového úložiště pro systém, Javu a Firefox.

Pro odinstalování CA z kořenového úložiště stačí jednoduše spustit:

$ mkcert -uninstall

V dokumentaci je možné najít další možnosti, jak nainstalovat certifikáty do mobilního zařízení a jak třeba přesvědčit Node.js, aby důvěřoval certifikátům vydaným  mkcert.

Na takové to domácí chroupání

Utilitu mkcert jsme s kolegy zkoušeli a umí přesně to, co je slibuje – vygenerovat certifikáty podepsané vlastní certifikační autoritou. Příjemným bonusem je možnost rychle nainstalovat certifikáty do prohlížeče.

Typický uživatel – vývojář, který potřebuje lokální certifikáty pro vývoj na svém počítači, ale nechce se mu s tím moc zabývat, bude s mkcert  nejspíš spokojen.

ict ve školství 24

Pokud je ale cílem vygenerovat certifikát, který se použije jiným způsobem, než „použít a zahodit“, zvážil bych jiné řešení.

Pro naše použití, tedy vygenerovat certifikát, který se použije při automatizovaném testování aplikace, to je dostatečně dobré.

Autor článku

Věroš Kaplan pracuje jako nájemný správce serverů na volné noze. Před několika lety objevil kouzlo automatizace a už ho to nepustilo. Zastává názor, že nudné úkoly mají dělat počítače – a měly by se tedy používat i pro správu dalších počítačů.