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.
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é.