PFX и P12 — расширения файлов формата PKCS#12 (Public Key Cryptography Standards #12). Файл с расширением .pfx или .p12 содержит в одном бинарном архиве: SSL/TLS-сертификат, приватный ключ сервера и цепочку промежуточных CA. Файл защищается паролем — без него извлечь ключ невозможно.
Как работает
PKCS#12 использует бинарную кодировку ASN.1 с шифрованием содержимого 3DES или AES (в более новых версиях). При создании PFX-файла указывается пароль, которым шифруется архив. Пример создания PFX через OpenSSL из PEM-файлов:
openssl pkcs12 -export -out certificate.pfx \
-inkey domain.key \
-in domain.crt \
-certfile intermediate.crt \
-passout pass:YourPassword
Извлечение компонентов из PFX:
openssl pkcs12 -in certificate.pfx -nocerts -out private.key
openssl pkcs12 -in certificate.pfx -nokeys -out cert.crt
PFX и P12 — разные расширения одного и того же формата PKCS#12. .pfx исторически использовался в экосистеме Microsoft, .p12 — в macOS и Java-приложениях. Содержимое идентично.
История
PKCS#12 разработан RSA Security в 1990-х годах как эволюция формата PFX, созданного Microsoft. RFC 7292 стандартизировал PKCS#12 в 2014 году, заменив более ранние неофициальные версии. До RFC 7292 разные приложения трактовали формат по-разному, что вызывало проблемы совместимости.
Связь с хостингом
PFX широко используется при миграции сертификатов между серверами: Windows IIS требует именно этот формат. При переносе сертификата с Linux-сервера (формат PEM) на Windows необходимо конвертировать через OpenSSL или Certbot. Java-приложения и Tomcat используют Keystore (JKS), в который PFX импортируется через keytool. Nginx и Apache работают с PEM-форматом напрямую — PFX для них нужно предварительно распаковать.
Ключевые отличия от похожих терминов
PEM (.crt, .pem, .key) — текстовый формат base64, каждый компонент в отдельном файле. PFX/P12 — бинарный контейнер, всё в одном файле с паролем. CER/DER — бинарный формат только сертификата без ключа. JKS — Java Keystore, специфичный для JVM.
Структура PFX/P12
PFX (PKCS#12) — бинарный контейнер: приватный ключ + сертификат домена + цепочка промежуточных CA. Защищён паролем (минимум AES-256). Используется для импорта в Windows IIS, Azure, Java KeyStore, Exchange Server.
Конвертация форматов
PEM → PFX: openssl pkcs12 -export -out cert.pfx -inkey private.key -in cert.crt -certfile chain.crt. PFX → PEM: openssl pkcs12 -in cert.pfx -nodes -out cert.pem. Для Nginx и Apache нужен формат PEM. Для Microsoft IIS и Windows — PFX.
Безопасность при хранении
PFX содержит приватный ключ — хранить защищённо. Не передавать по незащищённым каналам. Хранить резервную копию вместе с паролем отдельно. Ротация ключей: при компрометации — немедленный отзыв через CA и генерация нового ключа + CSR.
PFX в cloud-сервисах
Azure: загрузка PFX в Key Vault или App Service. AWS Certificate Manager: импорт через консоль (PEM или конвертация в PEM). Google Cloud: через SSL Certificates ресурс. Kubernetes: kubectl create secret tls tls-secret --cert=tls.crt --key=tls.key — нужен PEM, не PFX.