Преобразование pfx в pem с использованием openssl

У меня есть файл client_ssl.pfx, созданный из X509 Certificate Generator.

Как получить root.pem и client_ssl.pem из client_ssl.pfx, используя openssl?

5 ответов

Решение

Вы можете использовать инструмент командной строки OpenSSL. Следующие команды должны сделать трюк

openssl pkcs12 -in client_ssl.pfx -out client_ssl.pem -clcerts

openssl pkcs12 -in client_ssl.pfx -out root.pem -cacerts

Если вы хотите, чтобы ваш файл был защищен паролем и т. Д., То есть дополнительные опции.

Вы можете прочитать всю документацию здесь.

Другая перспектива для этого в Linux... вот как это сделать, чтобы полученный файл содержал дешифрованный закрытый ключ, чтобы что-то вроде HAProxy могло использовать его, не запрашивая пароль.

openssl pkcs12 -in file.pfx -out file.pem -nodes

Затем вы можете настроить HAProxy для использования файла file.pem.


Это РЕДАКТИРОВАТЬ из предыдущей версии, где у меня было несколько шагов, пока я не понял, что опция -nodes просто обходит шифрование с закрытым ключом. Но я оставляю это здесь, поскольку это может только помочь с обучением.

openssl pkcs12 -in file.pfx -out file.nokey.pem -nokeys
openssl pkcs12 -in file.pfx -out file.withkey.pem
openssl rsa -in file.withkey.pem -out file.key
cat file.nokey.pem file.key > file.combo.pem
  1. На первом шаге вам будет предложено ввести пароль для открытия PFX.
  2. На втором шаге вам будет предложено ввести этот плюс, а также составить ключевую фразу для ключа.
  3. На третьем шаге вам будет предложено ввести только что созданную парольную фразу для расшифровки.
  4. Четвёртое объединяет все это в один файл.

Затем вы можете настроить HAProxy для использования файла file.combo.pem.

Причина, по которой вам нужно 2 отдельных шага, когда вы указываете файл с ключом, а другой - без ключа, заключается в том, что если у вас есть файл, который имеет как зашифрованный, так и дешифрованный ключ, то что-то вроде HAProxy все равно предложит вам ввести ключевую фразу, когда он использует это.

Несмотря на то, что другие ответы верны и подробно объяснены, я обнаружил некоторые трудности с их пониманием. Вот метод, который я использовал (взято отсюда):

Первый случай: чтобы преобразовать файл PFX в файл PEM, содержащий как сертификат, так и закрытый ключ:

openssl pkcs12 -in filename.pfx -out cert.pem -nodes

Второй случай: чтобы преобразовать файл PFX в отдельные файлы PEM с открытым и закрытым ключами:

Извлекает закрытый ключ из PFX в файл PEM:

openssl pkcs12 -in filename.pfx -nocerts -out key.pem

Экспортирует сертификат (включает только открытый ключ):

openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem

Удаляет пароль (перефразирование) из извлеченного закрытого ключа (необязательно):

openssl rsa -in key.pem -out server.key

Вы можете извлечь ca-bundle, .crt и .key из .pfx, используя это.

      # Extracting ca-certs..."
  openssl pkcs12 -in ${filename}.pfx -nodes -nokeys -cacerts -out ${filename}-ca.crt

# Extracting key file..."
  openssl pkcs12 -in ${filename}.pfx -nocerts -out ${filename}.key

# Extracting crt..."
  openssl pkcs12 -in ${filename}.pfx -clcerts -nokeys -out ${filename}.crt

# combine ca-certs and cert files
  cat  ${filename}.crt ${filename}-ca.crt > ${filename}-full.crt

# Removing passphrase from keyfile"
  openssl rsa -in ${filename}.key -out ${filename}.key

Ссылка: https://gist.github.com/mediaupstream/a2694859b1afa59f26be5e8f6fd4806a

Для PFX, заблокированного паролем

Рекомендуется объединить аргумент пароля в одной команде с преобразованием, чтобы избежать ошибок.

вот так: Эта команда предназначена для извлечения закрытого ключа

      openssl pkcs12 -in "blablabla.pfx" -out key.key -nodes -passin pass:blablabla   

и эта команда для извлечения открытого ключа

      openssl pkcs12 -in "blablabla.pfx" -clcerts -nokeys -out crt.crtpem -nodes -passin pass:blablabla
Другие вопросы по тегам