Kde v súbore kľúča VPN sídlia n, e, d, p a q z RSA
n, e, d, p a q sú vnútri jednej štruktúry, nie v názvoch súborov. Prečítajte RSA kľúč VPN pomocou OpenSSL a spárujte ho s jeho certifikátom bez vypisovania tajomstiev.
Písmená vo vysvetlení RSA pomenúvajú polia vnútri jedného objektu, nie súbory, ktoré rozdáva nástroj PKI. Súbor súkromného kľúča obsahuje štruktúru, ktorej prvé polia sú verejné a neskoršie polia nesmú nikdy opustiť stroj, ktorý ukončuje tunel. Medzi týmito dvoma faktami leží väčšina praktických otázok, ktorý súbor odpovedá na ktorú otázku. Táto príručka najprv číta štruktúru a potom príkazy, ktoré ju skúmajú bez toho, aby ju vyliali.
Pred hľadaním prvočísel overte, že kľúč je RSA
Certifikát dokazuje, že nejaký kľúč existuje a bol podpísaný; nedokazuje, že kľúč je RSA. Systémy možno stavať na eliptických krivkách alebo Ed25519 a rovnaké usporiadanie adresárov slúži všetkým. Overte algoritmus skôr, než začnete hľadať prvočíselné faktory, ktoré tam nikdy neboli.
Tieto tri príkazy iba na čítanie odpovedajú na otázku a zaznamenávajú verziu nástroja.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
Verzia je dôležitá, pretože názvy volieb sa medzi hlavnými vydaniami presúvali. Vo výstupe certifikátu nájdite riadok algoritmu verejného kľúča a veľkosť kľúča; vo výstupe kľúča vypisuje RSA kľúč modulus a verejný exponent. Kľúč na eliptickej krivke vypisuje namiesto toho pomenovanú krivku a žiadne hľadanie z neho nezíska n ani q.
Čítajte štruktúru namiesto base64
PEM je base64 zabalené do hlavičkových riadkov a jeho dekódovanie dáva DER, teda serializovanú štruktúru, nie jedno obrovské celé číslo. Súkromné kľúče RSA cestujú v dvoch bežných kontajneroch, PKCS#1 a PKCS#8, a oba sa rozpadajú na rovnakú množinu čísel.
V prípade dvoch prvočísel nesie súkromná štruktúra deväť polí: verziu, modulus n, verejný exponent e, súkromný exponent d, prvočísla p a q, dva CRT exponenty a CRT koeficient. RFC 8017 oddiel A.1 definuje tieto komponenty a rozvrhnutie ASN.1 a pripúšťa aj viac než dve prvočísla, preto všeobecný parser môže vypísať ďalšie položky prvočísel. Všimnite si poradie, pretože vysvetľuje častú chybu: verejná polovica je uložená vnútri súkromného súboru, takže prítomnosť verejného poľa nerobí ten súbor bezpečným na zdieľanie. Všetko za ním je materiál, ktorý musí zostať na hostiteľovi.
Kódovanie pridáva vrstvu, ktorú je ľahké si pomýliť s obsahom. openssl asn1parse kreslí štruktúru ako strom, takže je vidieť poradie polí, a nič nešifruje ani nehovorí, či je kľúč použiteľný.
Spárujte certifikát s kľúčom bez vypísania kľúča
Ďalšia otázka zvyčajne znie, či certifikát a kľúč patria k sebe. Porovnanie modulov na ňu odpovedá, ale kopíruje aj materiál blízky súkromnému do terminálového prepisu, ktorý môže skončiť v tikete. Porovnanie verejných polovíc odpovedá na tú istú otázku bez čohokoľvek citlivého na obrazovke.
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
Identické súbory znamenajú, že certifikát nesie verejnú polovicu toho kľúča, a rozdiel znamená, že držíte nesprávny pár. Práve tento nesúlad je najčastejšou príčinou tunela, ktorý sa veselo dohodne a potom odmietne autentifikáciu. Potom odstráňte dva dočasné súbory; nie je v nich nič tajné, ale čistý pracovný adresár sa ľahšie premýšľa uprostred incidentu.
Vedzte, čo susedné súbory nie sú
Certifikát nie je zašifrovaný verejný kľúč, ktorý protistrana odomyká certifikátom CA; je to podpísaná väzba medzi verejným kľúčom a údajmi o identite. Súkromný podpisový kľúč CA zostáva oddelený od vlastného certifikátu aj od každého klientskeho kľúča. Ani žiadosť nie je certifikát: nesie požadované informácie a verejný kľúč s podpisom nad žiadosťou, čo z nej robí vstup na zápis, nie doklad o oprávnení.
| 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 |
Dve z tých položiek sa dosť často pletú s parametrami RSA, aby ich bolo treba pomenovať dvakrát. Súbor parametrov Diffie-Hellman obsahuje skupinové parametre na ustanovenie kľúča a žiadne prvočísla RSA, hoci sa tiež vypisuje ako veľké prvočíslo. Zoznam odvolaní zverejňuje stav certifikátov a nie je miestom, kde by sa mohol skryť súkromný exponent.
Preto by mal každý riadok inventára zaznamenať štyri veci: typ objektu, vlastníka, účel a či je zahrnutý súkromný materiál. Posledný stĺpec rozhoduje, kam sa súbor smie kopírovať, a práve ten ľudia preskakujú.
Zaznamenajte párovanie a potom overte handshake
Pred akoukoľvek zmenou uložte výstup overenia s dátumom a verziou OpenSSL. Neskoršiu rotáciu potom možno porovnať s dôkazmi, nie s pamäťou.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
Po porovnaní verejného kľúča prejdite cestu, ktorá pár spotrebúva: zdvihnite tunel, potvrďte, že certifikát je predložený a prijatý, a skontrolujte, ktorú identitu brána zaznamenala. Ak sa kľúč a certifikát zhodujú a autentifikácia napriek tomu zlyháva, závada je v dôvere, mapovaní identity alebo zásadách prístupu, nie v páre.
Na vrátenie uchovajte predchádzajúci kľúč a certifikát v adresári s dátumom a obnovujte oba spolu, nikdy len jeden z dvoch. Kľúč bez certifikátu a certifikát bez kľúča zlyhávajú zvonku rovnako, čo robí napoly obnovené páry drahými na rozpletenie o druhej ráno.