Вопрос или проблема
Я отвечаю за обслуживание двух серверов Debian. Каждый раз, когда мне приходится заниматься вопросами с сертификатами безопасности, я ищу уроки в Google и продолжаю попытки, пока это наконец не заработает.
Однако в своих поисках я часто сталкиваюсь с различными форматами файлов (.key
, .csr
, .pem
), но никогда не смог найти хорошее объяснение того, какова цель каждого формата файла.
Интересно, могут ли добрые люди здесь, на ServerFault, предоставить некоторое разъяснение по этому вопросу?
SSL существует достаточно долго, чтобы можно было предположить, что существуют согласованные форматы контейнеров. И вы правы, они есть. Слишком много стандартов, как это часто происходит. В конечном итоге все это разные способы кодирования данных, отформатированных в Abstract Syntax Notation 1 (ASN.1), в машиночитаемой форме, что и является форматом, в котором определены сертификаты x509.
- .csr — это Запрос на Подпись Сертификата. Некоторые приложения могут генерировать их для отправки в удостоверяющие центры. Фактический формат — PKCS10, который определен в RFC 2986. Он включает некоторые/все ключевые детали запрашиваемого сертификата, такие как субъект, организация, штат и так далее, а также публичный ключ сертификата, который нужно подписать. Эти файлы подписываются ЦС, и возвращается сертификат. Возвращенный сертификат является публичным сертификатом (который включает публичный ключ, но не частный ключ), который сам может быть представлен в нескольких форматах.
- .pem — определено в RFC 1422 (часть серии с 1421 по 1424) это формат контейнера, который может включать только публичный сертификат (например, как в установках Apache, и файлы сертификатов ЦС
/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-файл — это просто Base64-кодированный .der файл. 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 — это список отзыва сертификатов. Удостоверяющие центры создают их как способ дезактивации сертификатов до истечения срока их действия. Иногда их можно скачать с веб-сайтов ЦС.
Таким образом, существуют четыре разных способа представления сертификатов и их компонентов:
- PEM — регламентируется RFC, используется предпочтительно в открытом программном обеспечении, потому что это текстовый формат и, следовательно, менее подвержен ошибкам при переводе/передаче. Может иметь различные расширения (.pem, .key, .cer, .cert и др.)
- PKCS7 — открытый стандарт, использующийся Java и поддерживаемый Windows. Не содержит материала закрытого ключа.
- PKCS12 — частный стандарт Microsoft, который позднее был определен в RFC и обеспечивает повышенную безопасность по сравнению с форматом PEM в текстовом виде. Может содержать материал закрытого ключа и цепочки сертификации. Используется преимущественно в системах Windows, и может быть свободно преобразован в формат PEM с помощью openssl.
- DER — родительский формат PEM. Полезно воспринимать его как бинарную версию base64-кодированного файла PEM. Не часто используется за пределами Windows.
Надеюсь, это поможет.
PEM сам по себе не является сертификатом, это просто способ кодирования данных. X.509 сертификаты — один из типов данных, которые часто кодируются с использованием PEM.
PEM — это X.509 сертификат (структура которого определена с использованием ASN.1), закодированный с использованием ASN.1 DER (правила различительного кодирования), затем прогнанный через кодирование Base64 и размещенный между текстовыми строками-анкерами (BEGIN CERTIFICATE и END CERTIFICATE).
Вы можете представить те же данные, используя представления PKCS#7 или PKCS#12, и утилита командной строки openssl
может быть использована для этого.
Очевидные преимущества PEM заключаются в том, что он безопасен при вставке в тело сообщения электронной почты, поскольку имеет строки-анкеры и является 7-битным чистым.
RFC1422 содержит больше деталей о стандарте PEM в отношении ключей и сертификатов.
Иногда файл .crt
уже является .pem
. См.: https://stackoverflow.com/questions/991758/openssl-pem-key
Ответ или решение
Что такое файл PEM и чем он отличается от других форматов ключевых файлов, создаваемых с помощью OpenSSL?
Файл PEM (Privacy Enhanced Mail) представляет собой текстовый формат, используемый для хранения ряда криптографических объектов, таких как сертификаты и ключи. Формат PEM разработан для безопасного хранения и передачи данных, таких как сертификаты, ключи и другие криптографические объекты, в текстовом виде. Это делает его удобным для пересылки по электронной почте и другим средствам передачи, которые поддерживают только текстовые данные. Формат PEM закодирован в Base64, и данные обрамляются строками «BEGIN CERTIFICATE» и «END CERTIFICATE».
Отличия PEM от других форматов
-
.key: Обычно это файл, содержащий закрытый ключ, используемый для шифрования и расшифрования данных. Формат .key часто записан в PEM и хранит только закрытый ключ. Безопасность таких файлов крайне важна, и они обычно защищены правами доступа.
-
.csr: Certificate Signing Request (CSR) — запрос на подпись SSL-сертификата, который отправляется в центр сертификации (CA) для получения сертификата. Файл CSR содержит информацию о вашем домене и компании, а также ваш открытый ключ. После проверки данной информации CA возвращает подписанный сертификат.
-
.pkcs12 / .pfx / .p12: Это зашифрованный и защищенный паролем контейнер, который может содержать как закрытый, так и открытый ключи, а также цепочки сертификатов. Такие файлы часто используются в Windows и могут быть преобразованы в PEM с использованием команды OpenSSL.
-
.der: Это двоичный формат, используемый для кодирования данных ASN.1. Файл DER хранит ту же информацию, что и PEM, но в двоичном виде. Вы можете преобразовать DER в PEM с помощью OpenSSL.
-
.crt / .cert / .cer: Эти файлы могут быть либо в формате PEM, либо в формате DER и используются для хранения сертификатов. Файлы с такими расширениями обычно ассоциируются с Windows и распознаются как сертификаты системой.
-
.p7b / .keystore: Эти файлы соответствуют стандарту PKCS#7 и используются для обмена сертификатами, но не содержат закрытых ключей. Они поддерживаются Windows и Java.
Преимущества использования PEM
PEM-файлы предпочтительны в open-source программном обеспечении из-за их удобства в обработке текстовых данных. Они могут быть легко импортированы и экспортированы между различными системами и приложениями. Формат PEM поддерживается рядом мощных инструментов, таких как OpenSSL, что делает его универсальным и практичным выбором для многих пользователей.
Для администраторов Debian-серверов и других систем, понимание различий между этими форматами помогает управлять и защищать SSL-сертификаты, обеспечивая надежную защиту данных.