PKCS#12-certificaat converteren naar PEM met OpenSSL

Ik heb OpenSSL x64 op Windows 7 die ik heb gedownload van openssl-for-windows op Google Code. Ik probeer het volgende uit te voeren:

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

maar ik krijg een foutmelding.

unable to load private key

Hoe haal ik het certificaat in PEM uit de PKCS#12-winkel met OpenSSL?


Antwoord 1, autoriteit 100%

Probeer:

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

Daarna heb je:

  • certificaat in newfile.crt.pem
  • privésleutel in newfile.key.pem

Als u het certificaat en de sleutel zonder wachtwoord in hetzelfde bestand wilt plaatsen, gebruikt u het volgende, omdat een leeg wachtwoord ervoor zorgt dat de sleutel niet wordt geëxporteerd:

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

Of, als u een wachtwoord voor de privésleutel wilt opgeven, laat u -nodesweg en voert u een wachtwoord in:

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

Als u het PKCS#12-wachtwoord rechtstreeks vanaf de opdrachtregel (bijvoorbeeld een script) moet invoeren, voegt u gewoon -passin pass:${PASSWORD}:

toe

openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin 'pass:[email protected]'

Antwoord 2, autoriteit 3%

U hoeft alleen een wachtwoord op te geven. U kunt dit doen binnen dezelfde opdrachtregel met de volgende syntaxis:

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

U wordt dan om een wachtwoord gevraagd om de privésleutel in uw uitvoerbestand te coderen. Neem de optie “knooppunten” op in de regel hierboven als u de privésleutel ongecodeerd (platte tekst) wilt exporteren:

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

Meer info: http://www.openssl.org/docs/apps/pkcs12.html


Antwoord 3, autoriteit 3%

Als je Python kunt gebruiken, is het nog makkelijker als je de module pyopensslhebt. Hier is het:

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

Antwoord 4

Ik had een PFX-bestand en moest een KEY-bestand maken voor NGINX, dus deed ik dit:

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

Vervolgens moest ik het KEY-bestand bewerken en alle inhoud tot -----BEGIN PRIVATE KEY-----verwijderen. Daarna heeft NGINX het KEY-bestand geaccepteerd.


Antwoord 5

Er is een gratis en open-source GUI-tool KeyStore Explorerom met crypto-sleutelcontainers te werken. Hiermee kunt u een certificaat of privésleutel naar afzonderlijke bestanden exporteren of de container naar een ander formaat converteren (jks, pem, p12, pkcs12, enz.)


Antwoord 6

#!/usr/bin/env python3
from optparse import Option
from OpenSSL import crypto
import os
import warnings
from getpass import getpass
warnings.filterwarnings("ignore", category=DeprecationWarning) 
def sanitize_path(path):
    return os.path.expandvars(os.path.expanduser(path))
def main(in_file, out_file, passphrase=None):
    if not passphrase:
        passphrase = getpass(prompt=("SSL Private Key Passphrase: "))
    in_file = sanitize_path(in_file)
    out_file = sanitize_path(out_file)
    with open(in_file, "rb") as input_file:
        p12 = crypto.load_pkcs12(input_file.read(), passphrase)
        pem = crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
    with open(out_file, "w") as output_file:
        output_file.write(pem.decode('utf-8'))
if __name__ == '__main__':
    from optparse import OptionParser
    usage = "usage: %prog  input_file output_file [passphrase]"
    p = OptionParser(usage=usage)
    opt, args = p.parse_args()
    main(*args)

Antwoord 7

Als je een PEM-bestand zonder wachtwoord nodig hebt, kun je dezeoplossing gebruiken.

Kopieer en plak de privésleutel en het certificaat in hetzelfde bestand en sla op als .pem.

Het bestand ziet er als volgt uit:

-----BEGIN PRIVATE KEY-----
............................
............................
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
...........................
...........................
-----END CERTIFICATE-----

Dat is de enige manier die ik heb gevonden om certificaten te uploaden naar Cisco-apparaten voor HTTPS.

Other episodes