Как конвертировать PEM в DER
- Вставьте блок PEM в поле ввода или перетащите файл
.pem,.crt,.keyили.csr. - Выберите вид вывода в Конвертировать в:
- DER – Base64 в одну строку: тело PEM без строк-заголовков и переводов строк, готовое для поля JSON или переменной окружения.
- DER – hex: те же байты в hex для массивов байтов и трассировок протоколов.
- PEM (64 колонки) и Открытый ключ (PEM) нужны для обратного направления и для извлечения открытого ключа.
- Нажмите Скачать .der, чтобы сохранить двоичный файл, или Скопировать результат, чтобы получить текстовый вариант.
Конвертер сам распознаёт сертификаты, CSR, CRL, открытые и закрытые ключи (PKCS#1, PKCS#8, SEC1 EC), так что тип входных данных выбирать не нужно.
Что на самом деле делает конвертация
PEM служит текстовой обёрткой вокруг DER. Возьмём этот сертификат (в сокращении):
-----BEGIN CERTIFICATE-----
MIIBtzCCAV2gAwIBAgIUfX6gOa1S96OttEsj3WbuIdu0cE0wCgYIKoZIzj0EAwIw
...
-----END CERTIFICATE-----
Уберите две строки-маркера, склейте оставшиеся строки, декодируйте Base64, и получится файл DER: здесь это 443 байта, которые начинаются с заголовка ASN.1 SEQUENCE 30 82 01 b7. Теряется только метка в строках-маркерах. У файлов DER метки нет, поэтому программам, которые читают DER, нужно либо сказать, что это за файл, либо угадывать по структуре.
| Форма | Размер этого сертификата | Где используется |
|---|---|---|
| PEM | 656 байт | nginx, Apache, HAProxy, большинство утилит Linux |
| DER в Base64 одной строкой | 592 символа | JSON API, массивы x5c в JWK, переменные окружения |
| DER (двоичный) | 443 байта | утилиты Java и Windows, прошивки, загрузки application/pkix-cert |
Где нужен DER
- Встраиваемые устройства и прошивки: сертификаты, вкомпилированные в C как массив байтов, почти всегда в DER. Возьмите вывод в hex и вставьте его в массив.
- Платформы Apple:
SecCertificateCreateWithDataпринимает данные DER, а не текст PEM. - Параметр
x5cв JWK и элемент<ds:X509Certificate>в метаданных SAML содержат DER в Base64 без заголовков PEM. - URL CA Issuers в сертификатах обычно отдают файл
.cerв DER. - Windows: файлы
.cerбывают в обеих формах, но некоторые старые диалоги импорта и устройства принимают только DER.
PEM в DER через OpenSSL, Python и certutil
openssl x509 -in cert.pem -outform der -out cert.der
openssl req -in app.csr -outform der -out app.der
openssl pkey -in key.pem -outform der -out key.der
grep -v -- '-----' cert.pem | tr -d '\n'
Последняя строка печатает DER в Base64 одной строкой для файла с одним сертификатом. В Python ssl.PEM_cert_to_DER_cert(open("cert.pem").read()) возвращает байты DER сертификата. В Windows certutil -decode cert.pem cert.der убирает маркеры и декодирует. Подробнее об этом в статьях Base64 в OpenSSL и Base64 в Python.
Частые проблемы
- Несколько блоков в одном файле: текстовые форматы вывода конвертируют все блоки, а Скачать .der сохраняет только первый объект, потому что в файле DER ровно один объект. Сначала разделите цепочку или скачайте каждый сертификат с его карточки в декодере сертификатов.
-----BEGIN ENCRYPTED PRIVATE KEY-----: конвертируется нормально, но DER остаётся зашифрованным. Для расшифровки нужен пароль, и здесь она не выполняется.- Заголовки
Proc-Type: 4,ENCRYPTED: у устаревшего шифрования OpenSSL нет формы DER. Сначала выполнитеopenssl pkey -in key.pem -out plain.pemс паролем. -----BEGIN OPENSSH PRIVATE KEY-----: это вообще не ASN.1, так что DER из него не получить. Для его открытого ключа используйте инструмент для SSH-ключей.
Вопросы и ответы
Правда ли, что PEM просто Base64 от DER?
Да. Файл PEM хранит байты DER, закодированные в Base64 с переносом на 64 символах, между строками -----BEGIN label----- и -----END label-----. Если убрать эти строки и декодировать Base64, получится ровно файл DER.
Как конвертировать закрытый ключ из PEM в DER?
Вставьте его сюда и выберите DER – Base64 в одну строку или Скачать .der, либо выполните openssl pkey -in key.pem -outform der -out key.der. Ключ не покидает страницу, а его секретные значения не показываются.
Почему файл DER меньше, чем PEM?
Base64 превращает каждые 3 байта в 4 символа, а PEM добавляет переводы строк и две строки-заголовка. Сертификат DER в 443 байта становится файлом PEM в 656 байт, то есть примерно на 48% больше.