Konwersja certyfikatu PKCS#12 na pem przy użyciu OpenSSL

Mam OpenSSL x64 Na Windows 7, który pobrałem z openssl-for-windows na Google Code. Próbuję biec:

openssl pkcs12 -export -in "path.p12" -out "newfile.pem" 
Ale dostaję błąd.
unable to load private key

Jak wyodrębnić certyfikat w PEM ze sklepu PKCS#12 używając OpenSSL?

Author: Benoit Duffez, 2013-02-28

5 answers

Spróbuj:

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

Potem masz:

  • certyfikat w newfile.crt.pem
  • klucz prywatny w newfile.klucz.pem

Aby umieścić certyfikat i klucz w tym samym pliku, użyj następującego

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

Jeśli chcesz wprowadzić hasło PKCS # 12 bezpośrednio z linii poleceń (np. skryptu), po prostu dodaj -passin pass:${PASSWORD}:

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:P@s5w0rD'
 342
Author: kmx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-27 13:33:54

Wystarczy podać hasło. Możesz to zrobić w tym samym wierszu poleceń z następującą składnią:

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

Zostanie wyświetlony monit o podanie hasła do zaszyfrowania klucza prywatnego w pliku wyjściowym. Dołącz opcję "węzły" w powyższym wierszu, jeśli chcesz wyeksportować klucz prywatny niezaszyfrowany (zwykły tekst):

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

Więcej informacji: http://www.openssl.org/docs/apps/pkcs12.html

 18
Author: Colin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 20:21:26

Jeśli możesz używać Pythona, jest jeszcze łatwiej, jeśli masz moduł pyopenssl. Tutaj jest:

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())
 11
Author: KVISH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 19:14:25

Będzie to działać z plikiem .pem, który ma klucz prywatny i certyfikat w tym samym pliku (próbowałem tego z Apple Push Notification certificate)

(PushNotif.pem zawiera klucz prywatny i cert w jednym pliku)

$ OpenSSL pkcs12-export - in PushNotif.pem-inkey PushNotif.pem-out PushNotif.p12
Wpisz szukaną frazę: PushNotif.pem:
Wpisz Hasło Eksportu:
Verifying-Enter Export Password:

Po wprowadzeniu hasła jesteś gotowy.

 2
Author: bpolat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 17:15:17

W związku z tym, że NGINX nie jest w stanie stworzyć pliku klucza, nie jest w stanie stworzyć pliku klucza.]}

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

Następnie musiałem edytować plik klucza i usunąć całą zawartość do -----BEGIN PRIVATE KEY-----. Po tym NGINX zaakceptował plik klucza.

 1
Author: KTCO,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-17 20:44:56