Porovnávač certifikátu a súkromného kľúča — dôkaz podpisom, nie odhad
Porovnávač certifikátu a súkromného kľúča
Vložiť certifikát, ktorý server používa, a súkromný kľúč, ktorý sa s ním chystá nasadiť, a táto stránka odpovie na otázku, na ktorej nasadená stránka zlyháva: pochádzajú obidva z jedného páru kľúčov? Odpoveď nie je odhad z dĺžok modulov ani len z odtlačkov — stránka podpíše pevnú výzvu súkromným kľúčom a overí tento podpis verejným kľúčom v certifikáte. Ak overenie prejde, patria k sebe; ak zlyhá, žiadna úprava konfigurácie ich nespraví funkčnými. Oba údaje sa zobrazia vedľa seba s algoritmom, veľkosťou kľúča, identifikátorom kľúča subjektu a odtlačkom verejného kľúča, a nič, čo sa vloží, neopúšťa prehliadač.
1. Certifikát alebo reťazec
Vložiť možno ľubovoľný počet blokov. Každý certifikát sa porovnáva s každým
kľúčom, takže reťazec plus jeden kľúč presne povie, ku ktorému certifikátu v reťazci
tento kľúč patrí — bežné prekvapenie na serveri, ktorý podáva zlý certifikát
z balíka. Čítajú sa PEM, holé telo base64 alebo hexadecimálne telo a súbor
.p7b PKCS#7; kontrola certifikátu audituje
samotný certifikát, keď je kľúč vyriešený.
2. Súkromný kľúč alebo verejný kľúč
Prijímané sú PKCS#8 (BEGIN PRIVATE KEY), PKCS#1
(BEGIN RSA PRIVATE KEY), SEC1 (BEGIN EC PRIVATE KEY)
a holý verejný kľúč SPKI (BEGIN PUBLIC KEY), rovnako ako súbor kľúča vložený ako base64 alebo hexadecimálne. Šifrovaný kľúč PKCS#8
(BEGIN ENCRYPTED PRIVATE KEY) prehliadač nedokáže prečítať a stránka to takto hlási spolu s príkazom, ktorý heslo odstráni.
zatiaľ nič nebolo skontrolované
Ukážka je samopodpísaný certifikát a súkromný kľúč, ktorý k nemu patrí; obidva boli vytvorené pre túto stránku a nechránia nič. Ak sa kľúč nahradí iným kľúčom, zobrazí sa iný verdikt; ak sa verejný kľúč vloží namiesto súkromného, zobrazí sa zhoda verejného kľúča.
Súkromný kľúč vložený do ľubovoľnej webovej stránky si zaslúži najprv druhé zváženie. Táto stránka je jeden súbor čistého JavaScriptu, odkiaľkoľvek nič nenačítava a nerobí žiadnu požiadavku, takže kľúč sa prečíta, použije a zabudne v tejto karte. Stále je to záruka daná kódom, ktorý sa dá prečítať, nie garancia zo siete, ktorá sa zobrazuje: ak ide o produkčný kľúč, odporúča sa pracovať offline a uvažovať o tom, že najbezpečnejšia kontrola je rovnaký príkaz openssl na vlastnom serveri. Kľúč vložený sem sa nikdy neuloží, nezapíše do súboru a nikam neodošle — ani tlačidlami exportu, ktoré zapisujú zistenia o kľúči, nikdy samotný kľúč.
Prečo je odpoveďou podpis. Dva súbory môžu vyzerať podobne a predsa nesúhlasiť: RSA kľúče sa vo väčšine návodov porovnávajú podľa modulu, ale to funguje len pre RSA a kľúč môže mať správny modul s poškodeným exponentom alebo nesprávnym doplnením. Táto stránka dokazuje pár tak, ako to robí handshake — podpíše pevnú výzvu súkromným kľúčom a overí podpis verejným kľúčom v certifikáte — takže verdikt platí rovnako pre RSA, ECDSA a Ed25519. Keď sa vloží len verejná polovica, porovnávajú sa bajty verejného kľúča s bajtami v certifikáte, čo je rovnako presvedčivé pre identitu, len bez dôkazu, že niekto drží súkromnú polovicu.
Čo zhoda nehovorí. Nehovorí, že kľúč je ten, ktorý server skutočne načítava, že certifikát je dôveryhodný, že súbor kľúča je na disku neporušený ani že kľúč niekto nekopíroval. Nemôže povedať ani to, či je certifikát ten, ktorý dostane klient, pretože vyrovnávač záťaže alebo CDN pred stránkou môže podávať iný. Aby sa zistilo, čo živý server naozaj predkladá, spustí sa openssl s_client -connect example.com:443 -servername example.com
-showcerts a výstup sa vloží do poľa pre certifikát.
Odkiaľ sú súbory. Certifikát je ten, ktorým je server nastavený, alebo ten exportovaný z prehliadača či vybraný z balíka .p7b. Súkromný kľúč je súbor, ktorý webový server číta pri štarte, zvyčajne niečo ako privkey.pem alebo server.key. Ak je kľúč zašifrovaný, najprv sa dešifruje kópia príkazom openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-plain.pem, vloží sa a potom sa kópia zmaže.
Správa o zhode
Zatiaľ nič nebolo skontrolované. Certifikát a kľúč sa vložia vyššie a stlačí sa
Skontrolovať, či sa zhodujú. Verdikt sa zobrazí tu spolu s dôkazmi, na ktorých stojí, a správu možno kopírovať alebo uložiť.
Rovnaká kontrola pomocou openssl na vlastnom počítači
# verejný kľúč v certifikáte
openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256
# verejný kľúč v súkromnom kľúči
openssl pkey -in key.pem -pubout | openssl pkey -pubin -outform DER | openssl sha256
# oba digesty sú rovnaké len vtedy, keď k sebe patria
# starší spôsob len pre RSA: porovnanie modulov
openssl x509 -in cert.pem -noout -modulus | openssl md5
openssl rsa -in key.pem -noout -modulus | openssl md5
Porovnanie digestov funguje pre každý typ kľúča a zodpovedá tomu, čo táto stránka hlási ako odtlačok verejného kľúča, kým porovnanie modulu existuje len pre RSA. Ani jedno nedokazuje, že niekto drží súkromnú polovicu — to dokazuje kontrola podpisom vyššie, a preto ju táto stránka používa.
Čo správa obsahuje. Verdikt, dvojicu údajov, z ktorých vychádza (algoritmus, veľkosť kľúča, krivka, identifikátor kľúča subjektu a odtlačok verejného kľúča pre certifikát aj kľúč), a presný test, ktorý sa vykonal. Správa nikdy neobsahuje samotný súkromný kľúč: kľúč sa použije na vytvorenie podpisu a nezapisuje sa do textu, JSON ani do schránky. To, čo sa skopíruje alebo uloží, je bezpečné priložiť k tiketu; kľúč, ktorý sa vložil, bezpečný nie je, a schránku treba považovať za jediné iné miesto, kde kedy existoval.
Súkromie: certifikát a kľúč sa čítajú v karte, nič sa nenahráva a stránka nerobí žiadnu požiadavku — na tejto stránke nie je žiadna sonda ani vyhľadávanie. Na vytvorenie zodpovedajúceho páru sa použije generátor certifikátov s vlastným podpisom; na žiadosť o certifikát pre kľúč, ktorý už existuje, sa použije generátor CSR; na prečítanie obsahu certifikátu sa použije dekodér certifikátov.
🔒 Nástroje SSL a TLS
Nástroje na certifikáty a kľúče, ktoré bežia úplne v prehliadači.