it-swarm-ru.tech

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

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

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

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

1413
Noah Goodrich

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

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

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

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

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

1730
sysadmin1138

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 в том, что касается ключей и сертификатов.

146
James F

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

57
mgold