web-dev-qa-db-ja.com

後でSSH-PK-Authenticationで使用するためにPKCS12ファイルから公開/秘密鍵を抽出します。

後でSSH-Public-Key-Authenticationで使用するために、PKCS#12ファイルから公開鍵と秘密鍵を抽出します。

今のところ、私は。ssh/authorized_keyに入れたssh-keygenを介して鍵を生成しています、それぞれクライアント側のどこかにあります。

将来的には、PKCS#12コンテナの鍵を使用したいので、最初にPKCS#12から公開鍵を抽出し、次にそれらをに入れます。ssh/authorized_keys - ファイルopensslを通してこれを機能させる機会はありますか? PKCS#12の鍵はssh公開鍵認証と互換性がありますか?

173
lazydaemon

PKCS#12コンテナから公開/秘密鍵を抽出するには、次のコマンドを使用できます。

  • PKCS#1秘密鍵

    openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
    
  • 証明書:

    openssl pkcs12 -in yourP12File.pfx -clcerts -nokeys -out publicCert.pem
    
261
Nilesh

これは少しフォーマット変換することで可能です。

形式で秘密鍵を抽出するには、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
78
ryanc

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
14
frzng

解決策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
4

更新:私の答えは、 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>
1
gvlax

受け入れられた答えは正しいコマンドです、PEMパスワード(「Enter PEM pass phrase:」)を空白のままにしておくとキーを抽出するときに1つ追加するだけです。抽出されます。完全な鍵を入手するには、次のコマンドを実行するときにPEMパスワードを指定する必要があります。

パスワードのインポートに関しては、「インポートパスワードの入力」に実際のパスワードを指定することも、このパスワードを空白のままにすることもできます。

openssl pkcs12 -in yourP12File.pfx -nocerts -out privateKey.pem
0
Arvind Sachdeva

私の知る限りでは、PKCS#12は単なる証明書/公開/秘密鍵ストアです。 PKCS#12ファイルから公開鍵を抽出した場合、OpenSSHはPEMの形式で抽出されたものであればそれを使用できるはずです。 ssh公開鍵認証に使用するには、対応する秘密鍵(PEMにも)が必要であることはおそらくすでにご存知でしょう。

0
sirgeorge