回答:
次のコマンドを使用して、PKCS#12コンテナから公開鍵/秘密鍵を抽出できます。
PKCS#1秘密鍵
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
証明書:
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
openssl rsa -in privateKey.pem -out private.pem
-passout pass:
ます。これは、パラメーターがpass:mypasswordの形式であることを想定しています。 stackoverflow.com/a/27497899/206277
-nodes
するとキーが正しくエクスポートされる
これは、少しのフォーマット変換で可能です。
opensshが使用できる形式で秘密鍵を抽出するには、以下を使用できます。
openssl pkcs12 -in pkcs12.pfx -nocerts -nodes | openssl rsa > id_rsa
秘密鍵を公開鍵に変換するには:
openssl rsa -in id_rsa -pubout | ssh-keygen -f /dev/stdin -i -m PKCS8
公開鍵をopensshが使用できる形式で抽出するには、次を使用できます。
openssl pkcs12 -in pkcs12.pfx -clcerts -nokeys | openssl x509 -pubkey -noout | ssh-keygen -f /dev/stdin -i -m PKCS8
OpenSSHはそのままではPKCS#12ファイルを使用できません。他の人が示唆したように、OpenSSLの土地からOpenSSHに移動するPEM形式で秘密鍵を抽出する必要があります。ここで述べた他の解決策は私にはうまくいきません。私はOS X 10.9 Mavericks(現時点では10.9.3)を「事前にパッケージ化された」ユーティリティ(OpenSSL 0.9.8y、OpenSSH 6.2p2)で使用しています。
まず、OpenSSHで直接使用されるPEM形式の秘密鍵を抽出します。
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa > ~/.ssh/id_rsa
パスワードで秘密鍵を暗号化することを強くお勧めします:
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts | openssl rsa -passout 'pass:Passw0rd!' > ~/.ssh/id_rsa
明らかに、コマンドラインでプレーンテキストのパスワードを書くことも安全ではないので、履歴から最後のコマンドを削除するか、そこに到達しないことを確認する必要があります。シェルによって方法は異なります。コマンドの前にスペースを付けると、コマンドがBashや他の多くのシェルの履歴に保存されないようにすることができます。Bashの履歴からコマンドを削除する方法もここにあります:
history -d $(history | tail -n 2 | awk 'NR == 1 { print $1 }')
または、別の方法でOpenSSLに秘密鍵のパスワードを渡すこともできます。パスフレーズの引数については、OpenSSLのドキュメントをご覧ください。
次に、authorized_keysファイルに追加できるOpenSSH公開鍵を作成します。
ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub
| openssl rsa
ために?
~/.ssh/id_rsa
`|なしでバッグ属性のようないくつかの「残骸」を持つIDファイル()を作成します。openssl rsa`。IDSファイルを使用するOpenSSHやその他のユーティリティはその粗末を処理できると思いますが(私は試していません)、必要なデータのみを提供するためだけに使用され、それ以外のものは特にセキュリティに関するものである場合は特にそうです。
openssl pkcs12 -in filename.p12 -clcerts -nodes -nocerts
解決策1:
jksからP12を抽出する
keytool -importkeystore -srckeystore MyRootCA.jks -destkeystore MyRootCA.p12 -deststoretype PKCS12
P12からPEMを抽出し、CRTファイルからファイルとPEMを編集します
openssl pkcs12 -in MyRootCA.p12 -clcerts -nokeys -out MyRootCA.crt
jksからキーを抽出する
openssl pkcs12 -in MyRootCA.p12 -nocerts -out encryptedPrivateKey.pem
openssl rsa -in encryptedPrivateKey.pem -out decryptedPrivateKey.key
解決策2:
PEMとencryptedPrivateKeyをtxtファイルに抽出します `` `
openssl pkcs12 -in MyRootCA.p12 -out keys_out.txt
privateKeyを復号化する
openssl rsa -in encryptedPrivateKey.key [-outform PEM] -out decryptedPrivateKey.key
echo hello
ます。
更新:私の回答は、BryKKanによるhttps://unix.stackexchange.com / ...のよく説明された質問のほんの一部にすぎないことに気付きました
以下がその抜粋です。
openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>
受け入れられた答えは正しいコマンドです。キーを抽出するときに、PEMパスワード("Enter PEM pass phrase:"
)を空白のままにすると、完全なキーは抽出されず、のみlocalKeyID
が抽出されます。完全なキーを取得するには、次のコマンドを実行してPEMパスワードを指定する必要があります。
パスワードのインポートに関しては、実際のパスワードを指定する"Enter Import Password:"
ことも、このパスワードを空白のままにすることもできます。
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem