Ett sertifikat, mange innpakninger
En vanlig kilde til forvirring er at et enkelt sertifikat kan ankomme som en .crt, en .cer, en .pem, en .der, eller begravd inne i en .pfx, og folk antar at disse er forskjellige ting. Det er de som regel ikke. Sertifikatet er én fast struktur (.1-oppsettet beskrevet i anatomiartikkelen); hva som endrer seg er hvordan de bytene kodes og hva ellers er pakket ved siden av dem. Å kjenne den håndfullen virkelige formater får filendelsene til å slutte å være mystiske.
DER: den kanoniske binæren
Nederst er , Distinguished Encoding Rules fra ITU-T X.690. DER er den faktiske binære serialiseringen av sertifikatets ASN.1-tre: en følge av tag-length-value-poster, med nøyaktig én gyldig koding for enhver gitt verdi. Denne determinismen betyr noe, fordi utstederens signatur beregnes over disse nøyaktige bytene. En .der-fil (og ofte en .cer-fil) er rå DER uten tekstinnpakning. X.509-verktøyet avkoder denne binæren direkte.
PEM: DER innpakket i tekst
er DER som er blitt Base64-kodet og pakket inn i panserlinjer, definert av RFC 7468:
-----BEGIN CERTIFICATE-----
MIIELDCCAxSgAwIBAgIG... (Base64 of the DER)
-----END CERTIFICATE-----
PEM eksisterer fordi binær ikke overlever å bli limt inn i en e-post, en konfigurasjonsfil eller en terminal, mens Base64-tekst gjør det. Etiketten på BEGIN/END-linjene forteller deg hva kroppen er, og det finnes flere:
CERTIFICATEer et X.509-sertifikat.CERTIFICATE REQUESTer en (se signeringsforespørsel-artikkelen).PRIVATE KEYer en PKCS#8-privat nøkkel;RSA PRIVATE KEYogEC PRIVATE KEYer de eldre nøkkelspesifikke formatene.PUBLIC KEYer et nakent SubjectPublicKeyInfo.X509 CRLer en sertifikattilbakekallingsliste.
En enkelt PEM-fil kan holde flere blokker etter hverandre, noe som er hvordan en tjeners bladsertifikat pluss dens mellomkjede leveres i en enkelt fullchain.pem. For kodingen under, se Base64-artikkelen.
Filendelsen er ikke formatet
Dette er delen som får folk til å snuble: .crt, .cer, .pem og .key beskriver hensikt, ikke koding. En .crt kan være PEM eller DER. En .cer er ofte DER på Windows men PEM andre steder. En .key er en privat nøkkel, men kan være PKCS#1, PKCS#8 eller , i enten PEM eller DER. Den eneste pålitelige måten å vite hva du har er å se på de første bytene: PEM begynner med den synlige -----BEGIN-linjen, mens DER begynner med SEQUENCE-tag-byten 0x30. Verktøyet aksepterer enten, så du kan lime inn en PEM-blokk eller laste opp rå DER uten å konvertere først.
Beholdere som bunter mer enn én ting
To PKCS-formater pakker flere objekter sammen:
- PKCS#7 (
.p7b,.p7c) bærer ett eller flere sertifikater, typisk et sertifikat pluss dets kjede, men ingen privat nøkkel. Det brukes ofte til å gi noen en full kjede i én fil. - PKCS#12 (
.pfx,.p12), definert av RFC 7292, bunter et sertifikat, dets kjede og den matchende private nøkkelen til en enkelt passordbeskyttet blob. Dette er hva du eksporterer fra et Windows-sertifikatlager eller importerer til en lastbalanserer når du vil at nøkkelen og sertifikatet skal reise sammen. Fordi den inneholder den private nøkkelen, er en PKCS#12-fil sensitiv og passordet er det eneste som beskytter den.
Privatnøkkelkodinger
Private nøkler har sin egen lille dyrehage. PKCS#1 (RSA PRIVATE KEY) er det opprinnelige kun--formatet. SEC1 (EC PRIVATE KEY) er ekvivalenten for elliptisk-kurve-nøkler. PKCS#8 (PRIVATE KEY, valgfritt ENCRYPTED PRIVATE KEY) er den moderne, algoritmenøytrale innpakningen som kan holde enten, og er hva de fleste nåværende verktøy avgir. En sertifikatavkoder trenger aldri den private nøkkelen, og du bør aldri lime inn en privat nøkkel i et verktøy du ikke kontrollerer; X.509-verktøyet er for sertifikater, som er offentlige ved design.
Konvertere mellom dem
Fordi den indre strukturen er identisk, er konvertering tapsfri og rutinemessig. Med OpenSSL er PEM til DER openssl x509 -in cert.pem -outform der -out cert.der, og det omvendte bytter in- og out-formene. Å bygge et PKCS#12 fra et separat sertifikat og nøkkel er openssl pkcs12 -export -in cert.pem -inkey key.pem -out bundle.pfx. Ingen av disse endrer sertifikatet selv; de ompakker det bare.
Innpakning, ikke substans
Konklusjonen er at PEM mot DER, og .crt mot .pfx, er spørsmål om transport og bunting, ikke om hva sertifikatet sier. Fjern panseret, avkod fra Base64 og ignorer beholderen, og under hver eneste av disse er den samme signerte ASN.1-erklæringen som binder en offentlig nøkkel til et navn. Verktøyets oppgave er å skrelle av den innpakningen i nettleseren din og vise deg strukturen inni, uten at noen fil noensinne forlater siden.