Hvor n, e, d, p og q fra RSA bor i en VPN-nøkkelfil
n, e, d, p og q sitter inne i én struktur, ikke i filnavn. Les en RSA VPN-nøkkel med OpenSSL og paar den med sertifikatet uten å skrive ut hemmeligheter.
Bokstavene i en RSA-forklaring navngir felt inne i ett objekt, ikke filer som et PKI-verktøy deler ut. En privatnøkkelfil inneholder en struktur der de første feltene er offentlige og de senere feltene aldri må forlate maskinen som avslutter tunnelen. Mellom disse to fakta ligger de fleste praktiske spørsmålene om hvilken fil som svarer på hvilket spørsmål. Denne kjøreboken leser strukturen først, og deretter kommandoene som undersøker den uten å søle den.
Bekreft at nøkkelen er RSA før du leter etter primtall
Et sertifikat beviser at en nøkkel finnes og er signert; det beviser ikke at nøkkelen er RSA. Systemer kan bygges på elliptiske kurver eller Ed25519, og samme mappestruktur tjener dem alle. Kontroller algoritmen før du begynner å lete etter primfaktorer som aldri var der.
Disse tre skrivebeskyttede kommandoene svarer på spørsmålet og registrerer verktøyversjonen.
openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text
Versjonen betyr noe fordi valgnavn har flyttet seg mellom hovedutgivelser. I sertifikatets utdata finner du linjen for den offentlige nøkkelalgoritmen og nøkkelstørrelsen; i nøkkelens utdata skriver en RSA-nøkkel ut en modulus og en offentlig eksponent. En nøkkel på en elliptisk kurve skriver i stedet ut en navngitt kurve, og ingen mengde søking vil frembringe n eller q fra den.
Les strukturen i stedet for base64
PEM er base64 pakket i overskriftslinjer, og avkoding gir DER, som er en serialisert struktur og ikke ett enormt heltall. RSA-privatnøkler reiser i to vanlige beholdere, PKCS#1 og PKCS#8, og begge løses opp til det samme settet med tall.
I tilfellet med to primtall bærer den private strukturen ni felt: en versjon, modulus n, den offentlige eksponenten e, den private eksponenten d, primtallene p og q, to CRT-eksponenter og en CRT-koeffisient. RFC 8017 avsnitt A.1 definerer disse komponentene og ASN.1-oppsettet, og den tillater også mer enn to primtall, derfor kan en generell parser skrive ut ekstra primtallsoppføringer. Legg merke til rekkefølgen, fordi den forklarer en vanlig feil: den offentlige halvdelen er lagret inne i den private filen, så tilstedeværelsen av et offentlig felt gjør ikke filen trygg å dele. Alt etter det er materialet som må bli værende på verten.
Koding legger til et lag som lett forveksles med innhold. openssl asn1parse tegner strukturen som et tre slik at feltrekkefølgen blir synlig, og den dekrypterer ingenting og sier heller ikke om nøkkelen er brukbar.
Paar et sertifikat med en nøkkel uten å skrive ut nøkkelen
Spørsmålet som følger er vanligvis om et sertifikat og en nøkkel hører sammen. Sammenligning av moduli svarer på det, men kopierer også materiale nær det private inn i en terminalutskrift som kan ende i en sak. Sammenligning av de offentlige halvdelene svarer på samme spørsmål uten noe følsomt på skjermen.
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
Identiske filer betyr at sertifikatet bærer den offentlige halvdelen av den nøkkelen, og en forskjell betyr at du holder feil par. Den uoverensstemmelsen er den vanligste årsaken til en tunnel som forhandler lystig og deretter nekter autentisering. Fjern deretter de to midlertidige filene; de inneholder ingenting hemmelig, men en ren arbeidskatalog er lettere å tenke gjennom midt i en hendelse.
Vet hva nabofilene ikke er
Et sertifikat er ikke en kryptert offentlig nøkkel som motparten låser opp med CA-sertifikatet; det er en signert binding mellom en offentlig nøkkel og identitetsdata. CA-ens private signeringsnøkkel holdes atskilt fra sitt eget sertifikat og fra hver klientnøkkel. En forespørsel er heller ikke et sertifikat: den bærer den etterspurte informasjonen og den offentlige nøkkelen med en signatur over forespørselen, noe som gjør den til påmeldingsinput og ikke bevis på rettighet.
| 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 |
To av disse oppføringene forveksles med RSA-parametere ofte nok til å nevnes to ganger. En Diffie-Hellman-parameterfil inneholder gruppeparametere for nøkkeloppsett og ingen RSA-primtall, selv om den også skrives ut som et stort primtall. En tilbakekallingsliste publiserer sertifikatstatus og er ikke et sted der en privat eksponent kunne gjemme seg.
Hver inventarlinje bør derfor registrere fire ting: objekttype, eier, formål og om privat materiale er inkludert. Den siste kolonnen avgjør hvor filen kan kopieres, og det er den folk hopper over.
Registrer paringen, og verifiser deretter håndtrykket
Før du endrer noe, lagre verifiseringsutdataene med datoen og OpenSSL-versjonen. Da kan en senere rotasjon sammenlignes med bevis i stedet for med hukommelse.
openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates
Etter sammenligningen av den offentlige nøkkelen, gå gjennom veien som forbruker paret: heis tunnelen, bekreft at sertifikatet presenteres og godtas, og kontroller hvilken identitet gatewayen registrerte. Hvis nøkkelen og sertifikatet stemmer og autentiseringen likevel feiler, ligger feilen i tillit, identitetsmapping eller tilgangspolicy og ikke i paringen.
For tilbakerulling, oppbevar den forrige nøkkelen og sertifikatet i en datert katalog og gjenopprett begge sammen, aldri bare én av de to. En nøkkel uten sertifikatet sitt og et sertifikat uten nøkkelen sin feiler likt utenfra, noe som gjør halvt gjenopprettede par dyre å nøste opp klokken to om natten.