web-dev-qa-db-ja.com

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

最初に-パスフレーズを入力しないとどうなりますか?何らかの疑似ランダムフレーズが使用されていますか?カジュアルなハッカーを寄せ付けない「十分な」ものを探しています。

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


最終的にこれらのコマンドを使用して動作するようになりました。exec()を使用するのは一般に安全ではないと考えられており、PassPhraseをファイルに含める方が適切です。 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に感謝します。これがなければ、これは不可能でした。

後悔するのは1つだけです。Googleをいくら使っても、WindowsでXamppを使用してopenssl_pkey_new()を取得することはできないようです(properキーペアを生成する方法です)

88
Mawg

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

次のような呼び出しを使用して、コマンドラインでパスワードを指定してキーペアを生成できます(この場合、パスワードは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
173
caf

genrsagenpkeyに置き換えられました で、端末で手動で実行するとパスワードの入力を求められます:

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
}
5
Stuart Cardall