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

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

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

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

unable to load private key

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

Ответ 1

Try:

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

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

  • сертификат в файле newfile.crt.pem
  • закрытый ключ в файле newfile.key.pem

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

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

Ответ 2

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

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

Ответ 3

Если вы можете использовать Python, его еще проще, если у вас есть pyOpenSSL. Вот он:

from OpenSSL import crypto

# May require "" for empty password depending on version
p12 = crypto.load_pkcs12(file("push.p12", 'rb').read()[, password]) 

# 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())

Ответ 4

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

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

$openssl pkcs12 -export -in PushNotif.pem -inkey PushNotif.pem -out PushNotif.p12
Введите пароль для PushNotif.pem:
Введите Экспортный пароль:
Проверка - введите Экспортный пароль:

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

Ответ 5

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

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

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