Kde v souboru klíče VPN sídlí n, e, d, p a q z RSA
n, e, d, p a q jsou uvnitř jedné struktury, ne v názvech souborů. Přečtěte RSA klíč VPN pomocí OpenSSL a spárujte ho s jeho certifikátem, aniž byste vypisovali tajemství.
Písmena ve vysvětlení RSA pojmenovávají pole uvnitř jednoho objektu, ne soubory, které rozdává nástroj PKI. Soubor soukromého klíče drží strukturu, jejíž první pole jsou veřejná a pozdější pole nesmějí nikdy opustit stroj, který ukončuje tunel. Mezi těmito dvěma skutečnostmi leží většina praktických otázek, který soubor odpovídá na kterou otázku. Tato příručka nejprve čte strukturu a potom příkazy, které ji zkoumají, aniž by ji vylily.
Než začnete hledat prvočísla, ověřte, že klíč je RSA
Certifikát dokazuje, že nějaký klíč existuje a byl podepsán; nedokazuje, že klíč je RSA. Systémy lze stavět na eliptických křivkách nebo Ed25519 a stejné uspořádání adresářů slouží všem. Ověřte algoritmus, než začnete hledat prvočíselné faktory, které tam nikdy nebyly.
Tyto tři příkazy pouze pro čtení odpovídají na otázku a zaznamenávají verzi nástroje.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
Verze je důležitá, protože názvy voleb se mezi hlavními vydáními přesouvaly. Ve výstupu certifikátu najděte řádek algoritmu veřejného klíče a velikost klíče; ve výstupu klíče vypisuje RSA klíč modulus a veřejný exponent. Klíč eliptické křivky vypisuje místo toho pojmenovanou křivku a žádné hledání z něj n nebo q nevytáhne.
Čtěte strukturu místo base64
PEM je base64 zabalené do hlavičkových řádků a jeho dekódování dává DER, tedy serializovanou strukturu, nikoli jedno obrovské celé číslo. Soukromé klíče RSA cestují ve dvou běžných kontejnerech, PKCS#1 a PKCS#8, a oba se rozpadají na stejnou množinu čísel.
V případě dvou prvočísel nese soukromá struktura devět polí: verzi, modulus n, veřejný exponent e, soukromý exponent d, prvočísla p a q, dva CRT exponenty a CRT koeficient. RFC 8017 oddíl A.1 definuje tyto komponenty a rozvržení ASN.1 a také připouští více než dvě prvočísla, proto obecný parser může vypsat další položky prvočísel. Všimněte si pořadí, protože vysvětluje častou chybu: veřejná polovina je uložena uvnitř soukromého souboru, takže přítomnost veřejného pole nedělá tento soubor bezpečným ke sdílení. Vše za ním je materiál, který musí zůstat na hostiteli.
Kódování přidává vrstvu, kterou lze snadno splést s obsahem. openssl asn1parse kreslí strukturu jako strom, takže je vidět pořadí polí, a nic nedešifruje ani neříká, zda je klíč použitelný.
Spárujte certifikát s klíčem, aniž byste klíč vypsali
Otázka, která následuje, obvykle zní, zda certifikát a klíč patří k sobě. Srovnání modulů na ni odpovídá, ale také kopíruje materiál blízký soukromému do terminálového přepisu, který může skončit v tiketu. Srovnání veřejných polovin odpovídá na stejnou otázku, aniž by bylo na obrazovce něco citlivého.
openssl pkey -in vpn-client.key -pubout -out /tmp/key.pub
openssl x509 -in vpn-client.crt -pubkey -noout > /tmp/cert.pub
cmp /tmp/key.pub /tmp/cert.pub && echo MATCH
Shodné soubory znamenají, že certifikát nese veřejnou polovinu toho klíče, a rozdíl znamená, že držíte špatný pár. Tento nesoulad je nejčastější příčinou tunelu, který se hravě dohodne a poté odmítne autentizaci. Poté odstraňte dva dočasné soubory; nic tajného neobsahují, ale čistý pracovní adresář se snáz promýšlí uprostřed incidentu.
Vězte, co sousední soubory nejsou
Certifikát není zašifrovaný veřejný klíč, který protějšek odemyká certifikátem CA; je to podepsaná vazba mezi veřejným klíčem a údaji o identitě. Soukromý podepisovací klíč CA zůstává oddělen od vlastního certifikátu i od každého klientského klíče. Ani žádost není certifikát: nese požadované informace a veřejný klíč s podpisem nad žádostí, což z ní činí vstup k zápisu, nikoli doklad oprávnění.
| File | Answers | Does not prove |
|---|---|---|
| vpn-client.key | Possession of the private key | That the identity is enrolled |
| vpn-client.crt | A signed binding of public key to identity | That the client holds the matching key |
| vpn-client.csr | The requested binding and public key | That access was granted |
| dh2048.pem | Group parameters for key exchange | Any RSA component |
| crl.pem | Revocation status for certificates | Anything about a private key |
Dvě z těch položek se dostatečně často pletou s parametry RSA, že je třeba je pojmenovat dvakrát. Soubor parametrů Diffie-Hellman obsahuje skupinové parametry pro ustanovení klíče a žádná prvočísla RSA, i když se také vypisuje jako velké prvočíslo. Seznam odvolaných certifikátů zveřejňuje stav certifikátů a není místem, kde by se mohl skrývat soukromý exponent.
Každý řádek inventáře by proto měl zaznamenat čtyři věci: typ objektu, vlastníka, účel a zda je zahrnut soukromý materiál. Poslední sloupec rozhoduje o tom, kam se soubor smí kopírovat, a právě ten lidé přeskakují.
Zaznamenejte párování a pak ověřte handshake
Než cokoli změníte, uložte výstup ověření s datem a verzí OpenSSL. Pozdější rotaci pak lze srovnat s důkazy místo s pamětí.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
Po srovnání veřejného klíče projděte cestu, která pár spotřebovává: zvedněte tunel, potvrďte, že certifikát je předložen a přijat, a zkontrolujte, kterou identitu brána zaznamenala. Pokud se klíč a certifikát shodují a autentizace přesto selhává, závada je v důvěře, mapování identity nebo zásadách přístupu, ne v páru.
Pro návrat uchovejte předchozí klíč a certifikát v datovaném adresáři a obnovujte oba společně, nikdy jen jeden. Klíč bez certifikátu a certifikát bez klíče selhávají zvenčí stejně, což dělá napolo obnovené páry drahými na rozplétání ve dvě ráno.