Web

Что такое файл Pem и чем он отличается от других форматов файлов сгенерированных ключей OpenSSL?

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

Однако в своих поисках я часто натыкаюсь на различные форматы файлов (.key, .csr, .pem), но мне никогда не удавалось найти хорошее объяснение назначения каждого формата.

Я хотел бы узнать, не могли бы вы дать мне разъяснения по этому вопросу?

 

Ответ 1

SSL появился достаточно давно и существуют определенные форматы контейнеров. Их слишком много, как это обычно бывает. Итак, вот что я знаю, и я уверен, что другие подтвердят мое мнение.

.csr - Это запрос на подписание сертификата. Некоторые приложения могут генерировать их для отправки в центры сертификации. Фактический формат - PKCS10, который определен в RFC 2986. Он включает некоторые/все ключевые детали запрашиваемого сертификата, такие как субъект, организация, штат и т.д., а также открытый ключ сертификата, который должен быть подписан. Сначала его необходимо подписать в центре сертификации. Возвращенный сертификат - это открытый сертификат (который включает открытый ключ, но не закрытый ключ), который сам может быть в нескольких форматах.

.pem - определенный в RFC с 1421 по 1424, это контейнерный формат, который может включать только открытый сертификат (как, например, при установке Apache и файлов сертификатов CA /etc/ssl/certs),  или может включать всю цепочку сертификатов, включая открытый ключ, закрытый ключ и корневые сертификаты. Настораживает то, что он также может быть закодирован в CSR, Поскольку формат PKCS10 может быть переведен в PEM. Название происходит от Privacy Enhanced Mail (PEM), неудачного метода для безопасной электронной почты. Но формат контейнера, который он использовал, продолжает жить и является переводом x509 ASN.1 ключей в base64.

.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 как сертификат, а .pem таковым не является.

.p7b .keystore - Определенный в RFC 2315 как PKCS номер 7, это формат, используемый Windows для обмена сертификатами. Java воспринимает их как нативные, и часто использует .keystore в качестве расширения. В отличие от сертификатов в стиле .pem, этот формат имеет определенный способ включения сертификатов сертификационного пути.

.crl - список отзыва сертификатов. Центры сертификации выпускают их как способ деавторизации сертификатов по истечению срока действия. Иногда их можно загрузить с веб-сайтов центров сертификации.

 

В целом, существует четыре различных способа представления сертификатов и их компонентов:

  1. PEM - регулируется RFC, используется преимущественно в программах с открытым исходным кодом. Он может иметь различные расширения (.pem, .key, .cer, .cert и т.д.).
  2. PKCS7 - Открытый стандарт, используемый Java и поддерживаемый Windows. Не содержит закрытый ключ.
  3. PKCS12 - закрытый стандарт Microsoft, который позже был определен в RFC и обеспечивает повышенную безопасность по сравнению с обычным текстовым форматом PEM. Он может содержать закрытый ключ. Он используется преимущественно в системах Windows и может быть свободно преобразован в формат PEM с помощью OpenSSL.
  4. DER - родительский формат PEM. Полезно рассматривать его как двоичную версию файла PEM с кодировкой base64. Редко используется за пределами Windows.

 

Ответ 2

PEM - сам по себе не является сертификатом, это просто способ кодирования данных. Сертификаты X.509 - это один из типов данных, которые обычно кодируются с помощью PEM.

PEM - это сертификат X.509 (структура которого определена с помощью ASN.1), закодированный с помощью ASN.1 DER (distinguished encoding rules),  затем закодированный Base64 кодировкой и вставленный между заголовками текста (BEGIN CERTIFICATE и END CERTIFICATE).

Вы можете представить те же данные, используя представления PKCS#7 или PKCS#12, и для этого можно использовать утилиту командной строки OpenSSL.

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

RFC1422 содержит более подробную информацию о стандарте PEM в части, касающейся ключей и сертификатов. 

Схожие статьи

Web

Как завершить сеанс PHP через 30 минут?

Плюсы и минусы разработки веб-приложений на Node.js
Web

Плюсы и минусы разработки веб-приложений на Node.js

Web

Лучшие практики для настраиваемых помощников в Laravel 5

Web

Почему происходит «Неопределенная переменная/индекс/смещение» в PHP