Co to jest plik Pem i czym różni się od innych formatów plików kluczy generowanych w OpenSSL?

1342

Jestem odpowiedzialny za utrzymanie dwóch serwerów Debiana. Za każdym razem, gdy muszę robić cokolwiek z certyfikatami bezpieczeństwa, korzystam z samouczków Google i staram się, aż w końcu zadziała.

Jednak w swoich poszukiwaniach często natknąć różnych formatach ( .key, .csr, .pem), ale nigdy nie byłem w stanie znaleźć dobre wyjaśnienie w jakim celu każdy format pliku jest.

Zastanawiałem się, czy dobrzy ludzie tutaj w ServerFault mogliby wyjaśnić tę sprawę?

Noah Goodrich
źródło

Odpowiedzi:

1654

SSL istnieje już wystarczająco długo, można by pomyśleć, że zostaną uzgodnione formaty kontenerów. I masz rację, są. Zbyt wiele norm, jak to się dzieje. Więc o tym wiem i jestem pewien, że inni się do niego włączą.

  • .csr - jest to żądanie podpisania certyfikatu. Niektóre aplikacje mogą je wygenerować w celu przesłania ich do urzędów certyfikacji. Rzeczywisty format to PKCS10 zdefiniowany w RFC 2986 . Zawiera niektóre / wszystkie kluczowe szczegóły żądanego certyfikatu, takie jak temat, organizacja, stan, whatnot, a także klucz publiczny certyfikatu do podpisania. Są one podpisywane przez urząd certyfikacji i zwracany jest certyfikat. Zwrócony certyfikat publiczny certyfikat (który zawiera klucz publiczny, ale nie na klucz prywatny), który sam w sobie może być w kilku formatach.
  • .pem - zdefiniowany w dokumentach RFC od 1421 do 1424 , jest to format kontenera, który może zawierać tylko certyfikat publiczny (taki jak instalacje Apache i pliki certyfikatów CA /etc/ssl/certs) lub może obejmować cały łańcuch certyfikatów, w tym klucz publiczny, klucz prywatny i certyfikaty główne. Myląco może również kodować CSR (np. W znaczeniu stosowanym tutaj ), ponieważ format PKCS10 można przetłumaczyć na PEM. Nazwa pochodzi od Privacy Enhanced Mail (PEM) , nieudanej metody bezpiecznej poczty e-mail, ale używany format kontenera nadal istnieje i jest to tłumaczenie base64 kluczy ASN.1 x509.
  • .key - jest to plik w formacie PEM zawierający tylko klucz prywatny określonego certyfikatu i jest jedynie zwykłą nazwą, a nie znormalizowaną. W instalacjach Apache często znajduje się w /etc/ssl/private. Prawa do tych plików są bardzo ważne, a niektóre programy odmówią załadowania tych certyfikatów, jeśli zostaną ustawione nieprawidłowo.
  • .pkcs12 .pfx .p12 - pierwotnie zdefiniowany przez RSA w standardach kryptografii klucza publicznego (w skrócie PKCS), wariant „12” został pierwotnie ulepszony przez Microsoft, a następnie przesłany jako RFC 7292 . Jest to format kontenera z hasłem, który zawiera zarówno pary publiczne, jak i prywatne certyfikatów. W przeciwieństwie do plików .pem, ten kontener jest w pełni zaszyfrowany. Openssl może przekształcić to w plik .pem z kluczami publicznymi i prywatnymi:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Kilka innych formatów, które pojawiają się od czasu do czasu:

  • .der - sposób na kodowanie składni ASN.1 w formacie binarnym. Plik .pem to tylko plik .der zakodowany w formacie Base64. OpenSSL może je przekonwertować na .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem). System Windows widzi je jako pliki certyfikatów. Domyślnie system Windows eksportuje certyfikaty jako pliki w formacie .DER z innym rozszerzeniem. Lubić...
  • .cert .cer .crt - plik w formacie .pem (lub rzadko .der) z innym rozszerzeniem, który jest rozpoznawany przez Eksploratora Windows jako certyfikat, którym nie jest .pem.
  • .p7b .keystore - zdefiniowany w RFC 2315 jako PKCS numer 7, jest to format używany przez system Windows do wymiany certyfikatów. Java rozumie je natywnie i często .keystorezamiast tego używa jako rozszerzenia. W przeciwieństwie do certyfikatów w stylu .pem, ten format ma zdefiniowany sposób dołączania certyfikatów ścieżki certyfikacji.
  • .crl - lista odwołania certyfikatów. Urzędy certyfikacji produkują je jako sposób na cofnięcie autoryzacji certyfikatów przed wygaśnięciem. Czasami możesz je pobrać ze stron internetowych CA.

Podsumowując, istnieją cztery różne sposoby prezentowania certyfikatów i ich komponentów:

  • PEM - zarządzany przez RFC, preferencyjnie używany przez oprogramowanie typu open source. Może mieć różne rozszerzenia (.pem, .key, .cer, .cert, więcej)
  • PKCS7 - Otwarty standard używany przez Javę i obsługiwany przez Windows. Nie zawiera klucza prywatnego.
  • PKCS12 - prywatny standard Microsoft, który został później zdefiniowany w RFC, który zapewnia większe bezpieczeństwo w porównaniu do zwykłego formatu PEM. Może zawierać materiał klucza prywatnego. Jest preferencyjnie używany przez systemy Windows i może być swobodnie konwertowany do formatu PEM za pomocą openssl.
  • DER - format macierzysty PEM. Warto pomyśleć o tym jako o binarnej wersji pliku PEM zakodowanego w base64. Niezbyt często używane poza systemem Windows.

Mam nadzieję, że to pomoże.

sysadmin1138
źródło
297
Wspaniałą rzeczą w standardach jest to, że jest tak wiele do wyboru ...
squillman
36
.crt to kolejne popularne rozszerzenie .cert i .cer
David Pashley,
44
PEM to format pliku, który może składać się z certyfikatu (aka. Klucza publicznego), klucza prywatnego lub w rzeczywistości obu razem połączonych. Nie zwracaj tyle uwagi na rozszerzenie pliku; oznacza to Prywatną Ulepszoną Pocztę, zastosowanie, do którego nie miało większego zastosowania, ale trzymał się formatu pliku.
Dan Carley
20
Bardzo przydatna odpowiedź, ale nie sądzę, abyś obejrzał utworzony przez .pub format ssh-keygen. Przydałoby się wiedzieć, jak to się łączy z resztą.
Jez
24
Nie można nie zauważyć, że „e-mail o podwyższonej prywatności” nadawałby skrót „PEE” w przeciwieństwie do „PEM”. W RFC mają tendencję do używania zwrotu "Privacy Enhanced mail"
Aidan
141

Sam PEM nie jest certyfikatem, jest tylko sposobem kodowania danych. Certyfikaty X.509 to jeden typ danych, który jest powszechnie kodowany za pomocą PEM.

PEM jest certyfikatem X.509 (którego struktura jest zdefiniowana za pomocą ASN.1), zakodowana za pomocą ASN.1 DER (wyróżnione reguły kodowania), a następnie przebiega przez kodowanie Base64 i utknęła między zwykłymi liniami kotwiczącymi (POCZĄTEK CERTYFIKATU I KONIEC CERTYFIKATU ).

Możesz reprezentować te same dane za pomocą reprezentacji PKCS # 7 lub PKCS # 12, a do tego celu można użyć narzędzia wiersza polecenia openssl.

Oczywistą zaletą PEM jest to, że można go bezpiecznie wkleić do treści wiadomości e-mail, ponieważ ma ona linie kotwiczne i jest 7-bitowa.

RFC1422 zawiera więcej szczegółów na temat standardu PEM, ponieważ dotyczy kluczy i certyfikatów.

James F.
źródło
1
Jak to zrobić „za pomocą wiersza polecenia openssl”?
Samik R
2
Aby przekonwertować plik DER (.crt .cer .der) do PEM: openssl x509 -inform der -in cert.cer -out cert.pem. Aby przekonwertować plik PEM do DER: openssl x509 -outform der -in cert.pem -out certi.der. Aby przekonwertować plik PKCS # 12 (.pfx .p12) zawierający klucz prywatny i certyfikatów PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Aby przekonwertować plik certyfikatu PEM oraz prywatny klucz do PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtOd tutaj
mpeac
54

Czasami .crtplik jest już .pem. Zobacz: https://stackoverflow.com/questions/991758/openssl-pem-key

mgold
źródło
4
Rzeczywiście, właśnie to zauważyłem dzisiaj. Musiałem wprowadzić certyfikat PEM w module równoważenia obciążenia przestrzeni rackowej i zastanawiałem się, czy wygenerowany crt ma taki format. Ale tak to działało, więc taki był mój wniosek, wydaje się, że większość z tych .crt jest w formacie PEM.
Glenn Plas
Fokus @GlennPlas zamiast zawartości pliku, a nie jego nazwy lub rozszerzenia. Można nazywać to .foobarwszystko, co ważne ...
Patrick Mevzek