Позвольте мне начать с различий между форматами. Спасибо @ sysadmin1138 за отличное объяснение.
PEM - Управляется RFC, преимущественно используется программным обеспечением с открытым исходным кодом. Он может иметь различные расширения (.pem, .key, .cer, .cert, more)
DER - родительский формат PEM. Полезно думать о нем как о двоичной версии файла PEM в кодировке base64. Обычно не используется за пределами Windows.
.pkcs12 .pfx .p12 - Первоначально определено RSA в стандартах криптографии Publi c -Key (сокращенно PKCS), изначально был вариант «12» усовершенствовано Microsoft и позже представлено как RF C 7292. Это формат контейнера с паролем, который содержит как публичные c, так и частные сертификаты. В отличие от файлов .pem, этот контейнер полностью зашифрован.
Основная информация о .p12 - это полностью зашифрованный контейнер с паролем.
Кратко рассмотрим traefik сертификат. go
Пакет tls
использовать только crypto / tls и crypto / x509 .
package tls
import (
"crypto/tls"
"crypto/x509"
...
)
Look в crypto / x509: чтение сертификатов из файлов PKCS12 проблема github: Была попытка добавить поддержку PKCS12
cert в crypto / x509 , но в итоге она не была реализована.
Как уже упоминалось в комментариях, правильный способ - конвертировать .p12.
Вот пример горячий, чтобы достичь его (спасибо @mulaz):
openssl pkcs12 -in filename.pfx -nocerts -out filename.key
openssl pkcs12 -in filename.pfx -clcerts -nokeys -out filename.crt
И источник тот же: Советы: Использование openssl для извлечения закрытого ключа (файла .pem) из .pfx (Обмен личной информацией)
Надеюсь, это поможет!