SSL-сертификаты и закрытые ключи могут храниться в нескольких форматах файлов. Содержимое одинаковое — различается кодирование и упаковка. Основная путаница возникает из-за необходимости конкретного формата для вашего сервера.
Сравнение форматов
| Формат | Расширение | Кодирование | Содержит | Используется |
|---|---|---|---|---|
| PEM | .pem, .crt, .cer, .key | Base64 (текст) | Сертификат, ключ или цепочка (по одному на файл) | Nginx, Apache, большинство Linux-серверов |
| DER | .der, .cer | Бинарный | Один сертификат или ключ | Java, некоторые приложения Windows |
| PFX/PKCS#12 | .pfx, .p12 | Бинарный | Сертификат + ключ + цепочка в одном файле | Windows IIS, Azure, macOS Keychain |
PEM — самый распространённый формат
PEM (Privacy Enhanced Mail) — это текст в кодировке base64. Его можно открыть в текстовом редакторе:
-----BEGIN CERTIFICATE-----
MIIFYjCCBEqgAwIBAgISA8ht...
(base64 encoded data)
-----END CERTIFICATE-----
PEM-файлы могут содержать сертификаты, закрытые ключи или цепочки сертификатов. Заголовок указывает, что внутри:
BEGIN CERTIFICATE— сертификатBEGIN PRIVATE KEY— закрытый ключ (илиBEGIN RSA PRIVATE KEY/BEGIN EC PRIVATE KEY)BEGIN CERTIFICATE REQUEST— CSR
GetHTTPS выдаёт файлы в формате PEM — privkey.pem, cert.pem, chain.pem, fullchain.pem.
DER — бинарное кодирование
DER — это бинарная форма тех же данных, которые PEM кодирует в текст. Не читается человеком. Используется преимущественно Java-приложениями (keytool) и некоторыми компонентами Windows.
PFX/PKCS#12 — пакетный формат
PFX (Personal Information Exchange) объединяет сертификат, закрытый ключ и цепочку в один файл, защищённый паролем. Windows IIS, Azure App Service и macOS Keychain требуют этот формат.
Конвертация между форматами
Все конвертации выполняются с помощью OpenSSL:
PEM → PFX
openssl pkcs12 -export \
-out certificate.pfx \
-inkey privkey.pem \
-in cert.pem \
-certfile chain.pem
Вам будет предложено задать пароль экспорта.
PFX → PEM
# Extract certificate
openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out cert.pem
# Extract private key
openssl pkcs12 -in certificate.pfx -nocerts -nodes -out privkey.pem
# Extract chain
openssl pkcs12 -in certificate.pfx -cacerts -nokeys -out chain.pem
PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
Какой формат мне нужен?
| Сервер/Платформа | Формат | Необходимые файлы |
|---|---|---|
| Nginx | PEM | fullchain.pem + privkey.pem |
| Apache | PEM | cert.pem + chain.pem + privkey.pem |
| IIS (Windows) | PFX | certificate.pfx (конвертируйте из PEM) |
| Azure App Service | PFX | certificate.pfx |
| AWS (ACM) | PEM | cert.pem + chain.pem + privkey.pem (вставьте в консоль) |
| Java (Tomcat) | JKS или PFX | Конвертируйте PEM → PFX → JKS с помощью keytool |
| Node.js | PEM | Читайте файлы напрямую в коде |
Как определить формат файла
Не уверены, какой формат у файла? Проверьте:
# If it starts with "-----BEGIN" — it's PEM (base64 text)
head -1 mystery-file.pem
# If it's binary (garbled text) — it's DER or PFX
file mystery-file.cer
# Output like "data" or "certificate" = DER
# Output like "PKCS12" = PFX
# Inspect a PEM certificate
openssl x509 -in cert.pem -noout -text
# Inspect a DER certificate
openssl x509 -in cert.der -inform DER -noout -text
# Inspect a PFX file
openssl pkcs12 -in cert.pfx -info -nokeys
Путаница с расширениями файлов
| Расширение | Обычно означает | Но может быть |
|---|---|---|
.pem | PEM (base64) | Всегда PEM |
.crt | PEM-сертификат | DER в Windows |
.cer | PEM-сертификат | DER в Windows |
.key | PEM-закрытый ключ | DER (редко) |
.pfx | Пакет PKCS#12 | Всегда PFX |
.p12 | Пакет PKCS#12 | Всегда PFX (то же самое, что .pfx) |
.der | DER (бинарный) | Всегда DER |
.jks | Java KeyStore | Всегда JKS |
Простое правило: Откройте файл в текстовом редакторе. Если видите -----BEGIN CERTIFICATE-----, это PEM независимо от расширения. Если видите бинарные данные, это DER или PFX.
Часто задаваемые вопросы
В чём разница между .crt, .cer и .pem?
Все они могут быть в формате PEM. Расширение — это соглашение об именовании, а не индикатор формата. .crt и .cer обычно используются для файлов сертификатов, .pem — для любых PEM-кодированных файлов. В Windows файлы .cer иногда имеют DER-кодирование — откройте в текстовом редакторе, чтобы проверить.
Почему GetHTTPS даёт мне 4 файла?
Для максимальной совместимости. GetHTTPS предоставляет: privkey.pem (закрытый ключ), cert.pem (только ваш сертификат), chain.pem (сертификат промежуточного CA), fullchain.pem (сертификат + цепочка вместе). Nginx нужен fullchain.pem; Apache нужны отдельные cert.pem + chain.pem; IIS нужен PFX (конвертируйте из PEM).
Как создать PFX для Windows/IIS?
Используйте команду OpenSSL PEM → PFX выше. Вам понадобятся privkey.pem, cert.pem и chain.pem от GetHTTPS. Полученный .pfx можно импортировать в IIS, Azure App Service или macOS Keychain.
Можно ли конвертировать из одного формата в другой без закрытого ключа?
Вы можете конвертировать сертификат между PEM и DER без закрытого ключа. Но создание PFX требует закрытый ключ (он объединяет сертификат + ключ). Если вы потеряли закрытый ключ, необходимо сгенерировать новый сертификат.
Какой формат использует Let’s Encrypt?
Let’s Encrypt (через любой ACME-клиент, включая GetHTTPS) выдаёт файлы в формате PEM. Если вам нужен другой формат для вашего сервера, конвертируйте с помощью команд OpenSSL выше.