web-dev-qa-db-ja.com

opensslの-nodes引数の目的は何ですか?

Opensslの-nodes引数の目的は何ですか?

83
user624409

オプション-nodesは英語の単語「ノード」ではなく、「no DES」です。引数として指定すると、OpenSSLは PKCS#12 ファイル内の秘密鍵を暗号化しないことを意味します。

秘密キーを暗号化するには、-nodesを省略できます。キーは3DES-CBCで暗号化されます。キーを暗号化するために、OpenSSLはパスワードの入力を求め、そのパスワードを使用して、キー派生関数 EVP_BytesToKey を使用して暗号化キーを生成します。

OpenSSLのバージョンとコンパイルされたオプションに応じて、-nodesの代わりにこれらのオプションを提供できる場合があります。

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

最終的にライブラリレベルでは、OpenSSLは関数 PEM_write_bio_PrivateKey を選択した暗号化アルゴリズム(またはその欠如)で呼び出します。

107
indiv

編集: nginx v1.7.3に追加された ssl_password_file コンテキストのencryptedで各パスフレーズを試行して、指定されたファイルからパスフレーズを読み取るディレクティブ-private.key

indivは、-nodes引数がOpenSSLがUNencrypted private.keyを作成することを意味することは正しいです。そうでない場合は、encrypted-private.keyを作成するためのパスフレーズプロンプトが表示されます。 reqpkcs12CA.pl を参照

ただし、purpose(プログラマ向け)の理由は次のとおりです。

  • HTTPサーバー(例 ApacheNginx )は、パスフレーズなしでencrypted-private.keyを読み取ることができません→
    • オプションA-HTTPサーバーが起動するたびに、encrypted-private.keyのパスフレーズを提供する必要があります
    • オプションB-ssl_password_file file.keys;またはhttp { }コンテキストでserver { }を指定します。 [ ref ]
    • オプションC--nodesを使用して、暗号化せずにprivate.keyを作成します

便利:lock down private.key

  • {ssl-certグループにHTTPサーバーを追加}
  • Sudo chown root:ssl-cert private.keych怒り 自分のprivate.keyからrootユーザー、ssl-certグループ
  • Sudo chmod 640 private.key-private.keyのアクセス許可を所有者R/W、グループRに変更
  • これで、HTTPサーバーはUNencrypted private.keyを起動して読み取ることができます。

オプションA

より強力なセキュリティ、ただしサーバーの再起動時には、パスフレーズを手動で入力 for encrypted-private.key

オプションB

中セキュリティ、おそらくA/Cのバランスが良い

オプションC

セキュリティが弱いが、暗号化されていないprivate.keyパスフレーズの入力を求められない

12
Jake Berger