Hvad er en Pem-fil, og hvordan adskiller den sig fra andre OpenSSL Generated Key File Formats?

Jeg er ansvarlig for at vedligeholde to Debian-servere. Hver gang jeg skal gøre noget med sikkerhedscertifikater, søger jeg på Google efter vejledninger og slår løs, indtil det endelig virker.

I mine søgninger støder jeg dog ofte på forskellige filformater (.key, .csr, .pem), men jeg har aldrig kunnet finde en god forklaring på, hvad hvert filformat har til formål.

Jeg tænkte på, om de gode folk her på ServerFault kunne give nogle afklaring på dette spørgsmål?

Løsning

SSL har eksisteret længe nok til, at man skulle tro, at der ville være enighed om containerformater. Og det har du ret i, at der er det. Der er for mange standarder, som det er tilfældet. Så dette er hvad jeg ved, og jeg er sikker på at andre vil bidrage.

  • .csr - Dette er en Certificate Signing Request. Nogle programmer kan generere disse til indsendelse til certifikat-autoriteter. Det aktuelle format er PKCS10, som er defineret i RFC 2986. Det indeholder nogle/alle nøgleoplysninger om det ønskede certifikat, f.eks. emne, organisation, stat og lignende, samt den offentlige nøgle for det certifikat, der skal signeres. Disse bliver signeret af CA, og et certifikat returneres. Det returnerede certifikat er det offentlige certifikat (som indeholder den offentlige nøgle, men ikke den private nøgle), som i sig selv kan være i et par forskellige formater.
  • .pem - Defineret i RFC'erne 1421 til 1424, dette er et containerformat, der kan indeholde kun det offentlige certifikat (som f.eks. med Apache-installationer og CA-certifikatfiler /etc/ssl/certs), eller det kan indeholde en hel certifikatkæde, herunder offentlig nøgle, privat nøgle og rodcertifikater. Forvirrende nok kan det også kode en CSR (f.eks. som brugt her), da PKCS10-formatet kan oversættes til PEM. Navnet stammer fra Privacy Enhanced Mail (PEM), en fejlslagen metode til sikker e-mail, men det anvendte containerformat lever videre og er en base64-oversættelse af x509 ASN.1-nøglerne.
  • .key - Dette er en PEM-formateret fil, der kun indeholder den private nøgle for et bestemt certifikat, og er blot et konventionelt navn og ikke et standardiseret navn. I Apache-installationer ligger den ofte i /etc/ssl/private. Rettighederne på disse filer er meget vigtige, og nogle programmer vil nægte at indlæse disse certifikater, hvis de er indstillet forkert.
  • .pkcs12 .pfx .p12 - Oprindeligt defineret af RSA i Public-Key Cryptography Standards (forkortet PKCS), blev "12" varianten oprindeligt forbedret af Microsoft og senere indsendt som RFC 7292. Dette er et containerformat med adgangskode, der indeholder både offentlige og private certifikatpar. I modsætning til .pem-filer er denne container fuldt krypteret. Openssl kan omdanne dette til en .pem-fil med både offentlige og private nøgler: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Et par andre formater, der dukker op fra tid til anden:

  • .der - En måde at kode ASN.1-syntaks i binær form, en .pem-fil er blot en Base64-kodet .der-fil. OpenSSL kan konvertere disse til .pem (openssl x509 -inform der -in to-convert.der -out converted.pem). Windows ser disse som certifikatfiler. Som standard vil Windows eksportere certifikater som .DER-formaterede filer med en anden udvidelse. Som f.eks.
  • .cert .cer .crt - En .pem (eller sjældent .der) formateret fil med en anden udvidelse, som Windows Stifinder genkender som et certifikat, hvilket .pem ikke er.
  • .p7b .keystore - Defineret i RFC 2315 som PKCS nummer 7, er dette et format, der anvendes af Windows til udveksling af certifikater. Java forstår disse formularer naturligt, og bruger ofte .keystore som en udvidelse i stedet. I modsætning til .pem-certifikater har dette format en defineret måde at inkludere certifikater med certificeringssti på.
  • .crl - En liste over tilbagekaldte certifikater. Certifikatmyndigheder udarbejder disse som en måde at de-autorisere certifikater før udløbet. Du kan nogle gange downloade dem fra CA-websteder.

Sammenfattende kan man sige, at der er fire forskellige måder at præsentere certifikater og deres komponenter på:

  • PEM - Reguleret af RFC'er, og anvendes fortrinsvis af open source-software. Det kan have en række forskellige udvidelser (.pem, .key, .cer, .cert, .cert med flere)
  • PKCS7 - En åben standard, der anvendes af Java og understøttes af Windows. Indeholder ikke materiale til private nøgler.
  • PKCS12 - En privat Microsoft-standard, som senere blev defineret i en RFC, der giver øget sikkerhed i forhold til PEM-formatet i ren tekst. Denne kan indeholde materiale med private nøgler. Den anvendes fortrinsvis af Windows-systemer og kan frit konverteres til PEM-formatet ved hjælp af openssl.
  • DER - Det overordnede format for PEM. Det er nyttigt at betragte det som en binær version af den base64-kodede PEM-fil. Ikke rutinemæssigt brugt særlig meget uden for Windows.

Jeg håber, at dette hjælper.

Kommentarer (20)

PEM er i sig selv ikke et certifikat, det er blot en måde at kode data på. X.509-certifikater er en type data, der almindeligvis er kodet med PEM.

PEM er et X.509-certifikat (hvis struktur er defineret ved hjælp af ASN.1), kodet ved hjælp af ASN.1 DER (Distinguished Encoding Rules), der derefter køres gennem Base64-kodning og sættes ind mellem ankerlinjer i almindelig tekst (BEGIN CERTIFICATE og END CERTIFICATE).

Du kan repræsentere de samme data ved hjælp af PKCS#7- eller PKCS#12-repræsentationerne, og openssl-kommandolinjeværktøjet kan bruges til dette formål.

De åbenlyse fordele ved PEM er, at det er sikkert at indsætte i kroppen af en e-mail, fordi det har ankerlinjer og er 7-bit rent.

[RFC1422] (https://tools.ietf.org/html/rfc1422) indeholder flere oplysninger om PEM-standarden i forbindelse med nøgler og certifikater.

Kommentarer (2)

Nogle gange er en .crt'-fil allerede en.pem'-fil. Se: https://stackoverflow.com/questions/991758/openssl-pem-key

Kommentarer (2)