Що таке файл Pem і чим він відрізняється від інших форматів файлів ключових файлів, створених OpenSSL?


1342

Я відповідальний за підтримку двох серверів Debian. Кожен раз, коли мені доводиться робити щось із сертифікатами безпеки, я Google підручуюсь підручниками і відбиваю, поки це нарешті не працює.

Тим НЕ менше, в моїх пошуках , я часто стикаюся з різними форматами файлів ( .key, .csr, .pem) , але я ніколи не був в змозі знайти гарне пояснення того , що мета кожного формату файлу є.

Мені було цікаво, чи можуть добрі люди тут, на сервері ServerFault, дати дещо уточнення з цього приводу?


Відповіді:


1654

SSL існує досить довго, ви б могли подумати, що вони б узгодили формати контейнерів. І ти маєш рацію, є. Занадто багато стандартів, як це відбувається. Отже, це те, що я знаю, і я впевнений, що інші прозвучать.

  • .csr - це запит на підписання сертифіката. Деякі програми можуть генерувати їх для подання до сертифікаційних органів. Фактичний формат - PKCS10, який визначений у RFC 2986 . Він включає деякі / всі ключові реквізити запитуваного сертифіката, такі як тема, організація, штат, що не так, а також відкритий ключ сертифіката для підписання. Вони підписуються КА, і сертифікат повертається. Повернутий сертифікат - це публічний сертифікат (який включає відкритий ключ, але не приватний ключ), який сам може бути в декількох форматах.
  • .pem - Визначено в РЛКЕ 1421 через тисячі чотиреста двадцять чотири , це формат контейнер , який може включати в себе тільки відкритому сертифікат (наприклад, з Apache встановлює, і файли сертифікати CA /etc/ssl/certs), або може включати в себе весь ланцюжок сертифікатів , включаючи відкритий ключ, закритий ключ, і кореневі сертифікати. Конфузно, він може також кодувати CSR (наприклад, як тут використовується ), оскільки формат PKCS10 може бути переведений в PEM. Назва походить від PEM (Поліпшення конфіденційності) , невдалий метод захищеної електронної пошти, але формат контейнера, яким він користувався, працює і є базовим перекладом ключів x509 ASN.1.
  • .key - Це файл у форматі PEM, що містить лише приватний ключ конкретного сертифіката і є лише звичайним іменем, а не стандартизованим. В установках Apache це часто проживає /etc/ssl/private. Права на ці файли дуже важливі, і деякі програми відмовляться завантажувати ці сертифікати, якщо вони встановлені неправильно.
  • .pkcs12 .pfx .p12 - Спочатку визначено RSA в Стандартах криптографії відкритого ключа (скорочено PKCS), варіант "12" спочатку був покращений Microsoft, а пізніше представлений як RFC 7292 . Це формат парольованих контейнерів, який містить як публічні, так і приватні пари сертифікатів. На відміну від .pem файлів, цей контейнер повністю зашифрований. Openssl може перетворити це у .pem файл із відкритими та приватними ключами:openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes

Кілька інших форматів, які час від часу з’являються:

  • .der - спосіб кодування синтаксису ASN.1 у двійковому файлі .pem - це просто кодований .der файл Base64. OpenSSL може перетворити їх у .pem ( openssl x509 -inform der -in to-convert.der -out converted.pem). Windows розглядає ці файли як сертифікати. За замовчуванням Windows експортує сертифікати у форматі .DER файлів із іншим розширенням. Подібно до...
  • .cert .cer .crt - файл у форматі .pem (або рідко .der) з іншим розширенням, який розпізнається Windows Explorer як сертифікат, а це .pem - ні.
  • .p7b .keystore - визначено в RFC 2315 як PKCS № 7, це формат, який використовується Windows для обміну сертифікатами. Java розуміє це споконвічно і часто використовує .keystoreяк розширення. На відміну від сертифікатів у стилі .pem, цей формат має визначений спосіб включення сертифікатів шляху сертифікації.
  • .crl - Список відкликання сертифікатів. Органи сертифікації видають їх як спосіб деавторизації сертифікатів до закінчення терміну дії. Іноді їх можна завантажити з веб-сайтів CA.

Підсумовуючи, є чотири різні способи подання сертифікатів та їх компонентів:

  • PEM - Керується RFC, його переважно використовують програмне забезпечення з відкритим кодом. Він може мати різноманітні розширення (.pem, .key, .cer, .cert тощо)
  • PKCS7 - відкритий стандарт, який використовується Java та підтримується Windows. Не містить матеріалів приватного ключа.
  • PKCS12 - приватний стандарт Microsoft, який пізніше був визначений в RFC, що забезпечує підвищену безпеку порівняно з простотекстовим форматом PEM. Це може містити матеріал приватного ключа. Він використовується переважно системами Windows і може бути вільно перетворений у формат PEM за допомогою openssl.
  • DER - батьківський формат PEM. Це корисно думати про це як двійкову версію кодованого PEM-файлу base64. Зазвичай не використовується дуже часто за межами Windows.

Я сподіваюся, що це допомагає.


297
Чудова річ у стандартах полягає в тому, що їх так багато на вибір ...
squillman

36
.crt - ще одне поширене розширення для .cert та .cer
Девід Пашлі

44
PEM - це формат файлу, який може складатися з сертифіката (ака. Відкритого ключа), приватного ключа або взагалі об'єднаного разом. Не приділяйте стільки уваги розширенню файлу; це означає, що пошта з поліпшенням конфіденційності - це використання, яке воно не бачило, але формат файлу застряг.
Ден Карлі

20
Дуже корисна відповідь, але я не думаю, що ви охопили формат .pub, створений ssh-keygen. Було б корисно знати, як це пов'язано з рештою.
Jez

24
Не можу не помітити, що "Покращена конфіденційність електронної пошти" надасть абревіатуру "PEE" на відміну від "PEM". РФС схильні використовувати фразу "Пошті з поліпшенням конфіденційності"
лютого 15:15

141

PEM самостійно - це не сертифікат, це лише спосіб кодування даних. Сертифікати X.509 - це один тип даних, який зазвичай кодується за допомогою PEM.

PEM - сертифікат X.509 (структура якого визначена за допомогою ASN.1), кодується за допомогою DER ASN.1 (розрізнені правила кодування), потім проходить через кодування Base64 і застрягає між рядковими текстовими якорними лініями (BEGIN CERTIFICATE та END CERTIFICATE ).

Можна представити ті самі дані, використовуючи представлення PKCS # 7 або PKCS # 12, і для цього можна використовувати утиліту командного рядка openssl.

Очевидною перевагою PEM є те, що безпечно вставляти в тіло повідомлення електронної пошти, оскільки воно містить якірні лінії та 7-бітне чисте.

RFC1422 має більш детальну інформацію про стандарт PEM, оскільки він стосується ключів та сертифікатів.


1
Як це зробити "використовуючи командний рядок openssl"?
Самік R

2
Для перетворення файлу DER (.crt .cer .der) в PEM : openssl x509 -inform der -in cert.cer -out cert.pem. Щоб перетворити файл PEM в DER: openssl x509 -outform der -in cert.pem -out certi.der. Для перетворення PKCS # 12 файл (PFX - .p12) , що містить закритий ключ і сертифікати на PEM: openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Щоб перетворити файл сертифіката PEM і секретний ключ до PKCS # 12 (.pfx .p12): openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crtВід тут
mpeac

54

Іноді .crtфайл - це вже .pem. Дивіться: https://stackoverflow.com/questions/991758/openssl-pem-key


4
Дійсно правда, я щойно це сьогодні помітив. Мені довелося вводити сертифікат PEM в балансовий навантажувач стійок, і мені було цікаво, чи створений crt був у тому форматі Але це спрацювало так, і таким був мій висновок, більшість з цих .crt поставляються у форматі PEM.
Гленн Плаз

@GlennPlas фокусується замість вмісту файла, а не його імені чи розширення. Це може бути закликане .foobarдо всього, що має значення ...
Патрік Мевзек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.