web-dev-qa-db-ja.com

OpenSSLを使用してPKCS#12証明書をPEMに変換する

私はWindows 7上でOpenSSL x64を持っています。これはGoogle Code上の openssl-for-windowsからダウンロードしました 。実行しようとしています:

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

しかし、私はエラーが出ます。

unable to load private key

OpenSSLを使用してPKCS#12ストアからPEMで証明書を抽出する方法

172
Dean MacGregor

試してください:

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

PKCS#12のパスワードをコマンドライン(スクリプトなど)から直接入力する必要がある場合は、-passin pass:${PASSWORD}を追加するだけです。

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

パスワードを入力するだけです。次の構文を使用して、同じコマンドライン内でそれを実行できます。

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

その後、出力ファイル内の秘密鍵を暗号化するためのパスワードの入力を求められます。秘密鍵を暗号化せずに(プレーンテキストで)エクスポートする場合は、上の行に "nodes"オプションを含めます。

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

詳細情報: http://www.openssl.org/docs/apps/pkcs12.html

18
Colin

もしあなたが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())
14
KVISH

私はPFXファイルを持っていてNGINXのためのKEYファイルを作成する必要があったので、私はこれをしました:

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

それから私はKEYファイルを編集して-----BEGIN PRIVATE KEY-----までのすべての内容を削除しなければなりませんでした。その後NGINXはKEYファイルを受け入れました。

2
KTCO