Bokstäverna i en RSA-förklaring namnger fält inuti ett objekt, inte filer som ett PKI-verktyg delar ut. En fil med en privat nyckel innehåller en struktur vars första fält är offentliga och vars senare fält aldrig får lämna maskinen som avslutar tunneln. Mellan dessa två fakta ligger de flesta praktiska frågorna om vilken fil som svarar på vilken fråga. Den här handboken läser strukturen först och därefter kommandona som granskar den utan att spilla den.

Bekräfta att nyckeln är RSA innan du letar efter primtal

Ett certifikat bevisar att en nyckel finns och har signerats; det bevisar inte att nyckeln är RSA. System kan byggas på elliptiska kurvor eller Ed25519, och samma katalogstruktur tjänar dem alla. Kontrollera algoritmen innan du börjar leta efter primfaktorer som aldrig fanns där.

Dessa tre skrivskyddade kommandon besvarar frågan och registrerar verktygets version.

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

Versionen spelar roll eftersom valnamn har flyttats mellan huvudutgåvor. I certifikatets utdata hittar du raden för den offentliga nyckelalgoritmen och nyckelstorleken; i nyckelns utdata skriver en RSA-nyckel ut en modulus och en offentlig exponent. En nyckel på en elliptisk kurva skriver i stället ut en namngiven kurva, och ingen mängd sökning kommer att ta fram n eller q ur den.

Läs strukturen i stället för base64

PEM är base64 insvept i rubrikrader, och avkodning ger DER, det vill säga en serialiserad struktur och inte ett enda enormt heltal. RSA-privatnycklar reser i två vanliga behållare, PKCS#1 och PKCS#8, och båda löses upp till samma uppsättning tal.

När det gäller två primtal bär den privata strukturen nio fält: en version, modulus n, den offentliga exponenten e, den privata exponenten d, primtalen p och q, två CRT-exponenter och en CRT-koefficient. RFC 8017 avsnitt A.1 definierar dessa komponenter och ASN.1-layouten, och den tillåter också fler än två primtal, därför kan en allmän parser skriva ut extra primtalsposter. Lägg märke till ordningen, eftersom den förklarar ett vanligt fel: den offentliga halvan lagras inuti den privata filen, så förekomsten av ett offentligt fält gör inte filen säker att dela. Allt efter det är materialet som måste stanna på värden.

Kodning lägger till ett lager som lätt förväxlas med innehåll. openssl asn1parse ritar strukturen som ett träd så att fältordningen blir synlig, och det dekrypterar ingenting och säger inte heller om nyckeln är användbar.

Para ett certifikat med en nyckel utan att skriva ut nyckeln

Nästa fråga är vanligtvis om ett certifikat och en nyckel hör ihop. Jämförelse av moduli svarar på det, men kopierar också material nära det privata till en terminalutskrift som kan hamna i ett ärende. Jämförelse av de offentliga halvorna svarar på samma fråga utan något känsligt 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

Identiska filer betyder att certifikatet bär den offentliga halvan av den nyckeln, och en skillnad betyder att du håller fel par. Den avvikelsen är den vanligaste orsaken till en tunnel som förhandlar glatt och sedan nekar autentisering. Ta sedan bort de två tillfälliga filerna; de innehåller inget hemligt, men en ren arbetskatalog är lättare att tänka igenom mitt i en incident.

Vet vad grannfilerna inte är

Ett certifikat är inte en krypterad offentlig nyckel som motparten låser upp med CA-certifikatet; det är en signerad bindning mellan en offentlig nyckel och identitetsdata. CA:ns privata signeringsnyckel hålls åtskild från sitt eget certifikat och från varje klientnyckel. En begäran är inte heller ett certifikat: den bär den efterfrågade informationen och den offentliga nyckeln med en signatur över begäran, vilket gör den till registreringsindata och inte bevis på rätt.

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

Två av dessa poster förväxlas med RSA-parametrar tillräckligt ofta för att nämnas två gånger. En Diffie-Hellman-parameterfil innehåller grupparametrar för nyckeluppsättning och inga RSA-primtal, även om den också skrivs ut som ett stort primtal. En återkallningslista publicerar certifikatstatus och är inte en plats där en privat exponent skulle kunna gömma sig.

Därför bör varje inventarierad registrera fyra saker: objekttyp, ägare, syfte och om privat material ingår. Den sista kolumnen avgör vart filen får kopieras, och den är den folk hoppar över.

Registrera parningen och verifiera sedan handskakningen

Innan du ändrar något, spara verifieringsutdata med datum och OpenSSL-version. En senare rotation kan då jämföras med bevis i stället för med minne.

openssl verify -CAfile ca.crt vpn-client.crt
openssl x509 -in vpn-client.crt -noout -subject -issuer -dates

Efter jämförelsen av den offentliga nyckeln, gå igenom vägen som förbrukar paret: hissa tunneln, bekräfta att certifikatet presenteras och accepteras, och kontrollera vilken identitet gatewayen registrerade. Om nyckeln och certifikatet stämmer och autentiseringen ändå misslyckas, ligger felet i förtroende, identitetsmappning eller åtkomstpolicy och inte i paret.

För återställning, behåll föregående nyckel och certifikat i en daterad katalog och återställ båda tillsammans, aldrig bara en av de två. En nyckel utan sitt certifikat och ett certifikat utan sin nyckel misslyckas likadant utifrån, vilket gör halvt återställda par dyra att reda ut klockan två på natten.

Relaterade artiklar