Преобразование сертификата PKCS#12 в PEM с помощью OpenSSL

У меня есть OpenSSL x64 на Windows 7, который я загрузил из openssl-для-windows в коде Google. Я пытаюсь бежать:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 

но я получаю ошибку.

unable to load private key

Как извлечь сертификат в PEM из хранилища PKCS#12 с помощью OpenSSL?

5 ответов


попробуй:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys
openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes

после этого у вас есть:

  • сертификат в newfile.ЭЛТ.Пем!--10-->
  • закрытый ключ в файл.ключ.Пем!--10-->

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

openssl pkcs12 -in path.p12 -out newfile.pem

Если вам нужно ввести пароль PKCS#12 непосредственно из командной строки (например, скрипт), просто добавьте -passin pass:${PASSWORD}:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:P@s5w0rD'

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

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password]

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

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" -passin pass:[password] -nodes

Подробнее: http://www.openssl.org/docs/apps/pkcs12.html


Если вы можете использовать Python, это еще проще, если у вас есть pyopenssl модуль. Вот это:

from OpenSSL import crypto

# May require "" for empty password depending on version

with open("push.p12", "rb") as file:
    p12 = crypto.load_pkcs12(file.read(), "my_passphrase")

# PEM formatted private key
print crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())

# PEM formatted certificate
print crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())

это будет работать с .pem файл, который имеет закрытый ключ и сертификат в том же файле (я пробовал это с Apple Push Notification certificate)

(PushNotif.pem содержит закрытый ключ и сертификат в одном файле)

$ в OpenSSL pkcs12 из -экспортировать -в PushNotif.PEM-inkey PushNotif.pem-out PushNotif.Р12
Введите пароль для PushNotif.pem:
Введите Пароль Экспорта:
Проверка-Введите Пароль Экспорта:

раз вы вводите свой пароль, вы хорошо идти.


у меня был файл PFX и мне нужно было создать ключевой файл для NGINX, поэтому я сделал это:

openssl pkcs12 -in file.pfx -out file.key -nocerts -nodes

затем мне пришлось отредактировать ключевой файл и удалить все содержимое до -----BEGIN PRIVATE KEY-----. После этого NGINX принял ключевой файл.