Что такое Pem-файл и как он отличается от других форматов файлов Open Generated Key?

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

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

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

1119 голосов | спросил Noah Goodrich 19 Mayam09 2009, 06:24:42

3 ответа


1377

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

  • .csr . Это запрос на подпись сертификата. Некоторые приложения могут генерировать их для отправки в органы сертификации. Фактический формат - PKCS10, который определен в RFC 2986 . Он включает в себя некоторые /все ключевые данные запрашиваемого сертификата, такие как субъект, организация, состояние, еще что-то, а также открытый ключ сертификата для подписки. Они получают подписанный CA и сертификат возвращается. Возвращаемый сертификат является общедоступным сертификатом (который включает открытый ключ, но не закрытый ключ), который сам может быть в нескольких форматах.
  • .pem . Определено в RFC 1421 через 1424 , это формат контейнера, который может включать только открытый сертификат (например, с установками Apache и файлы сертификатов CA /etc/ssl/certs) или может включать целую цепочку сертификатов, включая открытый ключ, закрытый ключ и корневые сертификаты. Смутно, он может также кодировать CSR (например, в качестве здесь ), поскольку формат PKCS10 может быть переведен на PEM. Имя от Privacy Enhanced Mail (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 - это только файл с кодировкой 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 - Список отзыва сертификатов. Органы сертификации выражают это как способ отмены авторизации сертификатов до истечения срока действия. Иногда вы можете загружать их с веб-сайтов CA.

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

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

Надеюсь, это поможет.

ответил sysadmin1138 19 Mayam09 2009, 06:49:43
119

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

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

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

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

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

ответил James F 6 J0000006Europe/Moscow 2009, 19:19:28
49

Иногда файл .crt уже является .pem. См. https://stackoverflow.com/questions/991758/openssl-pem-key

ответил mgold 15 MaramThu, 15 Mar 2012 04:24:54 +04002012-03-15T04:24:54+04:0004 2012, 04:24:54

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132