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

1345

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

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

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

Ной Гудрич
источник

Ответы:

1657

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.

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

sysadmin1138
источник
298
Самое замечательное в стандартах заключается в том, что есть из чего выбирать ...
squillman
37
.crt - еще одно распространенное расширение для .cert и .cer
Дэвид
44
PEM - это формат файла, который может состоять из сертификата (известного как открытый ключ), закрытого ключа или, в действительности, и того и другого, соединенных вместе. Не обращайте так много внимания на расширение файла; это означает Privacy Enhanced Mail, использование, для которого он не видел особого смысла, но формат файла застрял.
Дэн Карли
20
Очень полезный ответ, но я не думаю, что вы рассмотрели формат .pub, созданный ssh-keygen. Было бы полезно узнать, как это связано с остальными.
Еж
24
Не могу не заметить, что «Privacy Enhanced Email» даст акроним «PEE», а не «PEM». RFC, как правило, используют фразу «конфиденциальная почтовая
рассылка
142

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"?
Самик Р.
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
55

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

mgold
источник
4
Действительно верно, я только заметил это сегодня. Мне пришлось ввести сертификат PEM в rackspace loadbalancer, и мне было интересно, был ли сгенерированный crt в этом формате. Но это сработало так, так что я тоже пришел к выводу, что большинство этих .crt приходят в формате PEM.
Гленн Плас
Фокус @GlennPlas вместо содержимого файла, а не его имени или расширения. Это можно назвать .foobarвсем, что имеет значение ...
Патрик Мевзек