Čo je súbor Pem a ako sa líši od iných formátov súborov s kľúčmi generovanými protokolom OpenSSL?

Som zodpovedný za údržbu dvoch serverov Debian. Vždy, keď musím niečo urobiť s bezpečnostnými certifikátmi, vyhľadám si na Googli návody a lámem si hlavu, kým to konečne funguje.

Pri hľadaní však často narážam na rôzne formáty súborov (.key, .csr, .pem), ale nikdy sa mi nepodarilo nájsť dobré vysvetlenie, na čo ktorý formát slúži.

Chcel som sa spýtať, či by dobrí ľudia tu na ServerFault mohli poskytnúť nejaké vysvetlenie v tejto veci?

Riešenie

SSL je tu už dosť dlho, takže by ste si mysleli, že budú existovať dohodnuté formáty kontajnerov. A máte pravdu, existujú. Ako to už býva, je tu príliš veľa štandardov. Takže toto je to, čo viem, a som si istý, že sa pridajú aj iní.

  • .csr - Toto je žiadosť o podpis certifikátu. Niektoré aplikácie ich môžu generovať na predloženie certifikačným autoritám. Skutočný formát je PKCS10, ktorý je definovaný v RFC 2986. Obsahuje niektoré/všetky kľúčové údaje o požadovanom certifikáte, ako je subjekt, organizácia, štát a podobne, ako aj verejný kľúč certifikátu, ktorý sa má podpísať. Tieto údaje podpíše certifikačná autorita a vráti certifikát. Vrátený certifikát je verejný certifikát (ktorý obsahuje verejný kľúč, ale nie súkromný kľúč), ktorý môže mať niekoľko formátov.
  • .pem - Definovaný v RFC 14211424, je to kontajnerový formát, ktorý môže obsahovať len verejný certifikát (ako napríklad pri inštaláciách Apache a súboroch certifikátov CA /etc/ssl/certs), alebo môže obsahovať celý reťazec certifikátov vrátane verejného kľúča, súkromného kľúča a koreňových certifikátov. Mätúce je, že môže kódovať aj CSR (napr. ako sa používa tu), pretože formát PKCS10 sa dá preložiť do PEM. Názov pochádza z Privacy Enhanced Mail (PEM), neúspešnej metódy pre bezpečnú elektronickú poštu, ale použitý kontajnerový formát žije ďalej a je to preklad kľúčov x509 ASN.1 do formátu base64.
  • .key - Ide o súbor vo formáte PEM, ktorý obsahuje len súkromný kľúč konkrétneho certifikátu a je to len konvenčný názov a nie štandardizovaný. V inštaláciách Apache sa často nachádza v súbore /etc/ssl/private. Práva na tieto súbory sú veľmi dôležité a niektoré programy odmietnu načítať tieto certifikáty, ak sú nastavené nesprávne.
  • .pkcs12 .pfx .p12 - Pôvodne definovaný spoločnosťou RSA v Public-Key Cryptography Standards (skrátene PKCS), variant "12" bol pôvodne vylepšený spoločnosťou Microsoft a neskôr predložený ako RFC 7292. Ide o zaheslovaný kontajnerový formát, ktorý obsahuje dvojice verejných a súkromných certifikátov. Na rozdiel od súborov .pem je tento kontajner plne šifrovaný. Openssl ho dokáže premeniť na súbor .pem s verejnými aj súkromnými kľúčmi: openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Niekoľko ďalších formátov, ktoré sa z času na čas objavia:

  • .der - spôsob kódovania syntaxe ASN.1 v binárnej podobe, súbor .pem je len súbor .der kódovaný v Base64. OpenSSL ich môže konvertovať na .pem (openssl x509 -inform der -in to-convert.der -out converted.pem). Systém Windows ich vidí ako súbory certifikátov. V predvolenom nastavení bude systém Windows exportovať certifikáty ako súbory vo formáte .DER s inou príponou. Napríklad...
  • .cert .cer .crt - Súbor vo formáte .pem (alebo zriedkavo .der) s inou príponou, ktorý Prieskumník Windows rozpozná ako certifikát, čo .pem nie je.
  • .p7b .keystore - Definovaný v RFC 2315 ako PKCS číslo 7, je to formát používaný systémom Windows na výmenu certifikátov. Java im rozumie natívne a často namiesto nich používa príponu .keystore. Na rozdiel od certifikátov v štýle .pem má tento formát definovaný spôsob, ako zahrnúť certifikáty certifikačnej cesty.
  • .crl - Zoznam odvolaných certifikátov. Certifikačné autority ich vytvárajú ako spôsob zrušenia autorizácie certifikátov pred vypršaním platnosti. Niekedy si ich môžete stiahnuť z webových stránok certifikačných autorít.

V súhrne existujú štyri rôzne spôsoby prezentácie certifikátov a ich súčastí:

  • PEM - riadi sa RFC, prednostne sa používa v softvéri s otvoreným zdrojovým kódom. Môže mať rôzne prípony (.pem, .key, .cer, .cert a ďalšie)
  • PKCS7 - otvorený štandard používaný v Jave a podporovaný systémom Windows. Neobsahuje materiál súkromného kľúča.
  • PKCS12 - Súkromný štandard spoločnosti Microsoft, ktorý bol neskôr definovaný v RFC a ktorý poskytuje zvýšenú bezpečnosť v porovnaní s formátom PEM s jednoduchým textom. Môže obsahovať materiál súkromného kľúča. Používa sa prednostne v systémoch Windows a možno ho voľne konvertovať na formát PEM pomocou openssl.
  • DER - Nadradený formát PEM. Je užitočné si ho predstaviť ako binárnu verziu súboru PEM zakódovaného do formátu base64. Mimo systému Windows sa bežne príliš nepoužíva.

Dúfam, že to pomôže.

Komentáre (20)

Samotný PEM nie je certifikát, je to len spôsob kódovania údajov. Certifikáty X.509 sú jedným z typov údajov, ktoré sa bežne kódujú pomocou PEM.

PEM je certifikát X.509 (ktorého štruktúra je definovaná pomocou ASN.1), zakódovaný pomocou ASN.1 DER (pravidlá rozlišovania kódovania), potom prechádza kódovaním Base64 a je vložený medzi riadky s kotvou v podobe obyčajného textu (BEGIN CERTIFICATE a END CERTIFICATE).

Tie isté údaje môžete reprezentovať pomocou reprezentácie PKCS#7 alebo PKCS#12, na čo možno použiť nástroj príkazového riadka openssl.

Zjavnou výhodou PEM je, že sa dá bezpečne vložiť do tela e-mailovej správy, pretože má kotviace riadky a je 7-bitovo čistý.

V dokumente RFC1422 sú uvedené ďalšie podrobnosti o štandarde PEM, ktoré sa týkajú kľúčov a certifikátov.

Komentáre (2)

Niekedy je súbor .crt už súborom .pem. Pozri: https://stackoverflow.com/questions/991758/openssl-pem-key

Komentáre (2)