Bogstaverne i en RSA-forklaring navngiver felter inde i ét objekt, ikke filer som et PKI-værktøj udleverer. En privatnøglefil rummer en struktur, hvis første felter er offentlige, og hvis senere felter aldrig må forlade den maskine, der afslutter tunnelen. Mellem de to kendsgerninger ligger de fleste praktiske spørgsmål om, hvilken fil der svarer på hvilket spørgsmål. Denne kørebog læser først strukturen og derefter de kommandoer, der undersøger den uden at spilde den.

Bekræft at nøglen er RSA, før du leder efter primtal

Et certifikat beviser, at en nøgle findes og er blevet signeret; det beviser ikke, at nøglen er RSA. Systemer kan bygges på elliptiske kurver eller Ed25519, og samme mappestruktur tjener dem alle. Kontroller algoritmen, før du begynder at lede efter primfaktorer, der aldrig var der.

Disse tre skrivebeskyttede kommandoer besvarer spørgsmålet og registrerer værktøjets version.

openssl version
openssl x509 -in vpn-client.crt -noout -text
openssl pkey -in vpn-client.key -noout -text

Versionen betyder noget, fordi tilvalsnavne har flyttet sig mellem hovedudgivelser. I certifikatets output finder du linjen med den offentlige nøglealgoritme og nøglestørrelsen; i nøglens output udskriver en RSA-nøgle et modulus og en offentlig eksponent. En nøgle på en elliptisk kurve udskriver i stedet en navngivet kurve, og ingen mængde søgning vil frembringe n eller q fra den.

Læs strukturen i stedet for base64

PEM er base64 pakket i headerlinjer, og afkodning giver DER, som er en serialiseret struktur og ikke ét enormt heltal. RSA-privatnøgler rejser i to almindelige containere, PKCS#1 og PKCS#8, og begge opløses til det samme sæt tal.

I tilfældet med to primtal bærer den private struktur ni felter: en version, modulus n, den offentlige eksponent e, den private eksponent d, primtallene p og q, to CRT-eksponenter og en CRT-koefficient. RFC 8017 afsnit A.1 definerer disse komponenter og ASN.1-inddelingen, og den tillader også mere end to primtal, hvorfor en generel parser kan udskrive ekstra primtalposter. Læg mærke til rækkefølgen, for den forklarer en hyppig fejl: den offentlige halvdel er gemt inde i den private fil, så tilstedeværelsen af et offentligt felt gør ikke filen sikker at dele. Alt efter det er materialet, der skal blive på værten.

Kodning tilføjer et lag, der let forveksles med indhold. openssl asn1parse tegner strukturen som et træ, så feltets rækkefølge bliver synlig, og den dekrypterer intet og fortæller heller ikke, om nøglen er brugbar.

Par et certifikat med en nøgle uden at udskrive nøglen

Det næste spørgsmål er sædvanligvis, om et certifikat og en nøgle hører sammen. Sammenligning af moduli besvarer det, men kopierer også materiale tæt på det private ind i en terminaludskrift, der kan ende i en sag. Sammenligning af de offentlige halvdele besvarer det samme spørgsmål uden noget følsomt på skærmen.

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 betyder, at certifikatet bærer den offentlige halvdel af den nøgle, og en forskel betyder, at du holder det forkerte par. Den uoverensstemmelse er den mest almindelige årsag til en tunnel, der forhandler lystigt og derefter afviser godkendelse. Fjern derefter de to midlertidige filer; de rummer intet hemmeligt, men en ren arbejdsmappe er lettere at tænke over midt i en hændelse.

Vid, hvad nabofilerne ikke er

Et certifikat er ikke en krypteret offentlig nøgle, som modparten låser op med CA-certifikatet; det er en signeret binding mellem en offentlig nøgle og identitetsdata. CA’ens private signeringsnøgle holdes adskilt fra dens eget certifikat og fra hver klientnøgle. En anmodning er heller ikke et certifikat: den bærer de ønskede oplysninger og den offentlige nøgle med en signatur over anmodningen, hvilket gør den til tilmeldingsinput snarere end bevis på ret.

FileAnswersDoes not prove
vpn-client.keyPossession of the private keyThat the identity is enrolled
vpn-client.crtA signed binding of public key to identityThat the client holds the matching key
vpn-client.csrThe requested binding and public keyThat access was granted
dh2048.pemGroup parameters for key exchangeAny RSA component
crl.pemRevocation status for certificatesAnything about a private key

To af de poster forveksles med RSA-parametre ofte nok til at blive nævnt to gange. En Diffie-Hellman-parameterfil indeholder gruppeparametre til nøgleetablering og ingen RSA-primtal, selvom den også udskrives som et stort primtal. En tilbagekaldelsesliste offentliggør certifikatstatus og er ikke et sted, hvor en privat eksponent kunne skjule sig.

Hver inventarlinje bør derfor registrere fire ting: objekttype, ejer, formål og om privat materiale er inkluderet. Den sidste kolonne afgør, hvor filen må kopieres, og det er den, folk springer over.

Registrér parringen, og verificér derefter håndtrykket

Før du ændrer noget, skal du gemme verifikationsoutputtet med datoen og OpenSSL-versionen. Så kan en senere rotation 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

Efter sammenligningen af den offentlige nøgle skal du gennemgå den vej, der forbruger parret: bring tunnelen op, bekræft at certifikatet præsenteres og accepteres, og kontroller, hvilken identitet gatewayen registrerede. Hvis nøglen og certifikatet passer sammen, og godkendelsen stadig fejler, ligger fejlen i tillid, identitetsmapping eller adgangspolitik og ikke i parringen.

Gem den forrige nøgle og certifikat i en dateret mappe til tilbagerulning, og gendan begge sammen, aldrig kun det ene. En nøgle uden sit certifikat og et certifikat uden sin nøgle fejler ens udefra, hvilket gør halvt gendannede par dyre at rede ud klokken to om natten.

Relaterede artikler