PEM — один из наиболее распространённых форматов хранения криптографических объектов: сертификатов, ключей и запросов на сертификат. Разберёмся, как он устроен и как читать его содержимое.
Что такое PEM формат
PEM (Privacy Enhanced Mail) — текстовый формат, основанный на Base64-кодировании бинарных данных. Файл PEM содержит один или несколько блоков. Каждый блок открывается строкой BEGIN ТИП и закрывается END ТИП, окружёнными пятью дефисами с каждой стороны.
Типичный вид PEM-файла — это заголовок, несколько строк Base64 и завершающий заголовок. Формат создан в 1993 году для защищённой электронной почты, но прижился повсеместно благодаря простоте: это обычный текстовый файл, читаемый в любом редакторе.
Типы PEM-файлов
Сертификат X.509
Заголовок блока: BEGIN CERTIFICATE
Публичный сертификат, содержащий: доменное имя, срок действия, публичный ключ, данные удостоверяющего центра, цифровую подпись CA. Расширения файлов: .pem, .crt, .cer.
Приватный ключ
Форматы блока:
BEGIN PRIVATE KEY— PKCS#8, без шифрованияBEGIN ENCRYPTED PRIVATE KEY— PKCS#8, с шифрованиемBEGIN RSA PRIVATE KEY— традиционный формат PKCS#1BEGIN EC PRIVATE KEY— ECDSA ключ
Приватный ключ — самый чувствительный файл. Хранить его нужно в защищённом месте и никогда не передавать третьим лицам.
Публичный ключ
Заголовок блока: BEGIN PUBLIC KEY
Публичная часть ключевой пары. Безопасно передавать и публиковать.
CSR (Certificate Signing Request)
Заголовок блока: BEGIN CERTIFICATE REQUEST
Запрос на выпуск сертификата. Содержит публичный ключ и информацию об организации. Отправляется в удостоверяющий центр (CA) для получения подписанного сертификата.
PEM vs DER
| Характеристика | PEM | DER |
|---|---|---|
| Формат | Текст (Base64) | Бинарный |
| Расширения | .pem, .crt, .cer, .key | .der, .cer |
| Редактируемость | Открывается текстовым редактором | Только бинарные утилиты |
| Размер | ~33% больше | Компактнее |
| Использование | Веб-серверы (nginx, Apache) | Java, Windows |
Цепочка доверия SSL/TLS
SSL/TLS сертификат работает через иерархию доверия:
- Root CA — корневой удостоверяющий центр (Sectigo, DigiCert, Let's Encrypt)
- Intermediate CA — промежуточный CA, подписан Root CA
- End-entity certificate — сертификат вашего сайта, подписан Intermediate CA
Браузер доверяет сайту, если может выстроить цепочку от сертификата сайта до доверенного Root CA. В PEM-файл часто записывают всю цепочку подряд — несколько блоков один за другим.
Полезные команды openssl
# Просмотр содержимого сертификата
openssl x509 -in cert.pem -text -noout
# Проверить срок действия
openssl x509 -in cert.pem -noout -dates
# Показать субъект и издателя
openssl x509 -in cert.pem -noout -subject -issuer
# Просмотр CSR
openssl req -in request.csr -text -noout
# Проверить соответствие ключа и сертификата
openssl x509 -noout -modulus -in cert.pem | md5sum
openssl rsa -noout -modulus -in key.pem | md5sum
# Просмотр цепочки сертификатов сайта
openssl s_client -connect example.com:443 -showcerts
Для проверки SSL-сертификата на живом домене используйте SSL Checker. Для работы с JWT-токенами — JWT декодер.
Инструмент на reChecker
Просмотрщик PEM-файлов на reChecker разбирает содержимое прямо в браузере: вставьте PEM-блок и получите читаемую информацию о сертификате, ключе или CSR — без отправки данных на сервер.