後でSSH-Public-Key-Authenticationで使用するために、PKCS#12ファイルから公開鍵と秘密鍵を抽出します。
今のところ、私は。ssh/authorized_keyに入れたssh-keygenを介して鍵を生成しています、それぞれクライアント側のどこかにあります。
将来的には、PKCS#12コンテナの鍵を使用したいので、最初にPKCS#12から公開鍵を抽出し、次にそれらをに入れます。ssh/authorized_keys - ファイルopensslを通してこれを機能させる機会はありますか? PKCS#12の鍵はssh公開鍵認証と互換性がありますか?
PKCS#12コンテナから公開/秘密鍵を抽出するには、次のコマンドを使用できます。
PKCS#1秘密鍵
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
証明書:
openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
これは少しフォーマット変換することで可能です。
形式で秘密鍵を抽出するには、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.2p 2)で使用しています。
まず、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
解決策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
更新:私の答えは、 https://unix.stackexchange.com/でよく説明されている質問と重複していたことに気づいた。 .. by BryKKan
これが抜粋です。
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:」)を空白のままにしておくとキーを抽出するときに1つ追加するだけです。抽出されます。完全な鍵を入手するには、次のコマンドを実行するときにPEMパスワードを指定する必要があります。
パスワードのインポートに関しては、「インポートパスワードの入力」に実際のパスワードを指定することも、このパスワードを空白のままにすることもできます。
openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
私の知る限りでは、PKCS#12は単なる証明書/公開/秘密鍵ストアです。 PKCS#12ファイルから公開鍵を抽出した場合、OpenSSHはPEMの形式で抽出されたものであればそれを使用できるはずです。 ssh公開鍵認証に使用するには、対応する秘密鍵(PEMにも)が必要であることはおそらくすでにご存知でしょう。