コマンドラインからパスフレーズを使用してopenSSLキーを生成する方法は?


107

まず、パスフレーズを指定しないとどうなりますか?ある種の疑似ランダムフレーズが使用されていますか?私は、カジュアルなハッカーを寄せ付けない「十分に良い」何かを探しています。

次に、コマンドラインからパスフレーズを指定して、コマンドラインからキーペアを生成するにはどうすればよいですか?


私はようやくこれらのコマンドを使用して動作しました。exec()を使用しますが、これは一般に使用するのは安全ではないと考えられています。PHPは自分のPC(Windowsを実行し、PSコマンドがない)でのみ実行されると確信しているので、このリスクを受け入れることができます。

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

@cafに感謝します。

ただ一つの後悔-それは、私がどれほどGoogleに関係なく、誰もopenssl_pkey_new()WindowsでXamppを操作するようには見えない(これはキーペアを生成する適切な方法です)


4
なぜopenssl_pkey_new()...キーペアを生成する「適切な」方法なのですか?
Jake Berger

Windowsには(通常)ありませんpsが、Vista以降にはありますwmic process get commandline
dave_thompson_085

回答:


210

パスフレーズを使用しない場合、秘密鍵は対称暗号で暗号化されず、完全に保護されずに出力されます。

次のような呼び出しを使用して、コマンドラインでパスワードを指定してキーペアを生成できます(この場合、パスワードはですfoobar)。

openssl genrsa -aes128 -passout pass:foobar 3072

ただし、コマンドライン引数は通常すべてのプロセスに表示されるため、このパスフレーズは、マシン上で同時に実行されている他のプロセスによって取得される可能性があることに注意してください。

より良い代替策は、ファイルパーミッションで保護されている一時ファイルにパスフレーズを書き込み、次のように指定することです。

openssl genrsa -aes128 -passout file:passphrase.txt 3072

または、標準入力にパスフレーズを入力します。

openssl genrsa -aes128 -passout stdin 3072

file:オプション付きの名前付きパイプ、またはファイル記述子を使用することもできます。


次に、一致する公開鍵を取得するにはopenssl rsa、を-passin使用して、秘密鍵の暗号化に使用されたものと同じパスフレーズをパラメーターに指定する必要があります。

openssl rsa -passin file:passphrase.txt -pubout

(これは標準入力で暗号化された秘密鍵を想定しています-代わりにを使用してファイルからそれを読み取ることができます-in <file>)。


3072ビットの秘密鍵と公開鍵のペアをファイルに作成し、秘密鍵のペアをパスワードで暗号化する例foobar

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

+1すばらしい、うまくいきました!おかげで、もしあなたがほんの少しだけ助けることができるなら、あなたは答えを与えられます...なぜこれはうまくいきませんか?openssl rsa -in privkey.pem -pubout -passout pass:foobar -out pubkey.pem
Mawgはモニカを

または、別の言い方をすると、コマンドからの公開鍵の取得方法(私のものとは少し異なります)。マッチしたペアが必要です。これは「十分に良い」セキュリティにすぎません。
Mawgはモニカを

4
@Mawg:opensslコマンドは、指定された秘密鍵に対応する公開鍵を出力しています-公開鍵は暗号化されていないため(秘密ではありません)、使用し-passoutても意味がありません。-passin最初のステップで秘密鍵を暗号化するために使用されたパスフレーズを提供するために、おそらくそこで使用したいでしょう。また、答えに何かを追加しました。
caf 2010年

@caf、素晴らしいフィードバックをありがとう(もう一度+1)。しかし、私は明らかに、OpenSSLを使用することを許可されないほど愚かです。ファイルにキーを入れたいのですが、なんらかの理由でそれopenssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pemができません。秘密鍵をファイルに生成するためのコマンドと、公開鍵を(ファイル内にも)生成するための秒の2つのコマンドを教えてください。このような迷惑をかけられて申し訳ありませんが、私はそれをいじっていて、うまく機能させることができません:-(
Mawgはモニカを

3
@Mawg:-outparamが後に続く場合、OpenSSLはそれを気に入らない2048-実際、それはコマンドラインの最後のものであるはずです(私はそのように私の答えを更新しました)。最後の例を見てください、それがあなたの望んでいることだと思います。AES-128 について、これらの問題を信頼している人がAES-256よりも推奨しています。
ca

9

genrsaされているに置き換えgenpkey&それがパスワードを要求する端末内に手動で実行する場合:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

ただし、スクリプトから実行する場合、コマンドはパスワードを要求しないため、プロセスがshellスクリプト内の関数を使用するときにパスワードが表示されないようにします。

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.