Unde locuiesc n, e, d, p și q din RSA într-un fișier de cheie VPN
n, e, d, p și q stau într-o singură structură, nu în numele fișierelor. Citiți o cheie RSA de VPN cu OpenSSL și asociați-o cu certificatul ei fără a tipări secrete.
Literele dintr-o explicație RSA numesc câmpuri din interiorul unui obiect, nu fișiere pe care le distribuie un instrument PKI. Un fișier de cheie privată conține o structură ale cărei prime câmpuri sunt publice, iar câmpurile ulterioare nu trebuie să părăsească niciodată mașina care încheie tunelul. Între aceste două fapte se află majoritatea întrebărilor practice despre ce fișier răspunde la ce întrebare. Acest ghid citește mai întâi structura, apoi comenzile care o inspectează fără a o vărsa.
Confirmați că cheia este RSA înainte de a căuta numere prime
Un certificat dovedește că o cheie există și a fost semnată; nu dovedește că cheia este RSA. Sistemele pot fi construite pe curbe eliptice sau Ed25519, iar aceeași dispunere de directoare le servește pe toate. Verificați algoritmul înainte de a începe căutarea unor factori primi care nu au fost niciodată acolo.
Aceste trei comenzi doar-citire răspund la întrebare și înregistrează versiunea instrumentului.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
Versiunea contează pentru că numele opțiunilor s-au mutat între versiunile majore. În ieșirea certificatului, găsiți linia algoritmului de cheie publică și dimensiunea cheii; în ieșirea cheii, o cheie RSA tipărește un modul și un exponent public. O cheie pe curbă eliptică tipărește în schimb o curbă cu nume, și nicio căutare nu va produce n sau q din ea.
Citiți structura în locul base64
PEM este base64 înfășurat în linii de antet, iar decodarea lui dă DER, adică o structură serializată și nu un singur întreg uriaș. Cheile private RSA călătoresc în două containere obișnuite, PKCS#1 și PKCS#8, iar ambele se rezolvă la același set de numere.
În cazul a două numere prime, structura privată poartă nouă câmpuri: o versiune, modulul n, exponentul public e, exponentul privat d, numerele prime p și q, doi exponenți CRT și un coeficient CRT. RFC 8017 secțiunea A.1 definește aceste componente și dispunerea ASN.1 și permite și mai mult de două numere prime, de aceea un analizator general poate tipări intrări suplimentare de numere prime. Observați ordinea, pentru că explică o greșeală frecventă: jumătatea publică este stocată în fișierul privat, deci prezența unui câmp public nu face acel fișier sigur de partajat. Tot ce urmează este materialul care trebuie să rămână pe gazdă.
Codificarea adaugă un strat ușor de confundat cu conținutul. openssl asn1parse desenează structura ca un arbore pentru ca ordinea câmpurilor să devină vizibilă, și nu descifrează nimic și nu spune dacă cheia este utilizabilă.
Asociați un certificat cu o cheie fără a tipări cheia
Întrebarea care urmează este de obicei dacă un certificat și o cheie merg împreună. Compararea modulelor răspunde la asta, dar copiază și material apropiat de privat într-o transcriere de terminal care poate ajunge într-un tichet. Compararea jumătăților publice răspunde la aceeași întrebare fără nimic sensibil pe ecran.
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
Fișiere identice înseamnă că certificatul poartă jumătatea publică a acelei chei, iar o diferență înseamnă că țineți perechea greșită. Această nepotrivire este cea mai frecventă cauză a unui tunel care negociază vesel și apoi refuză autentificarea. Apoi eliminați cele două fișiere temporare; nu conțin nimic secret, dar un director de lucru curat este mai ușor de gândit la mijlocul unui incident.
Știți ce nu sunt fișierele vecine
Un certificat nu este o cheie publică criptată pe care cealaltă parte o deschide cu certificatul CA; este o legătură semnată între o cheie publică și date de identitate. Cheia privată de semnare a CA rămâne separată de propriul certificat și de fiecare cheie de client. Nici o cerere nu este un certificat: ea poartă informațiile cerute și cheia publică cu o semnătură asupra cererii, ceea ce o face intrare de înregistrare și nu dovadă a dreptului.
| 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 |
Două dintre acele intrări sunt confundate cu parametrii RSA destul de des pentru a fi numite de două ori. Un fișier de parametri Diffie-Hellman conține parametri de grup pentru stabilirea cheii și niciun număr prim RSA, deși se tipărește și ca un număr prim mare. O listă de revocare publică starea certificatelor și nu este un loc unde un exponent privat s-ar putea ascunde.
Prin urmare, fiecare linie de inventar ar trebui să înregistreze patru lucruri: tipul obiectului, proprietarul, scopul și dacă este inclus material privat. Ultima coloană decide unde poate fi copiat fișierul, și ea este cea pe care oamenii o sar.
Înregistrați asocierea, apoi verificați strângerea de mână
Înainte de a schimba ceva, salvați ieșirea verificării cu data și versiunea OpenSSL. O rotație ulterioară poate fi atunci comparată cu dovezi, nu cu memoria.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
După compararea cheii publice, parcurgeți calea care consumă perechea: ridicați tunelul, confirmați că certificatul este prezentat și acceptat, și verificați ce identitate a înregistrat poarta de acces. Dacă cheia și certificatul se potrivesc și autentificarea tot eșuează, defectul este în încredere, în maparea identității sau în politica de acces, nu în pereche.
Pentru revenire, păstrați cheia și certificatul anterioare într-un director cu dată și restabiliți-le pe amândouă împreună, niciodată doar unul dintre ele. O cheie fără certificatul ei și un certificat fără cheia lui eșuează identic din exterior, ceea ce face perechile pe jumătate restabilite scumpe de descurcat la ora două dimineața.