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


102

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


2
Stack Overflowは、プログラミングと開発に関する質問のためのサイトです。この質問はプログラミングや開発に関するものではないため、トピックから外れているようです。ヘルプセンターで、どのようなトピックについて質問できますかをご覧ください。おそらく、スーパーユーザーまたはUnix&Linux Stack Exchangeのほうがよいでしょう。
jww

20
@jww同意しません。opensslは低レベルのツールキットであり、開発者は常にそれに対処する必要があります。線はかなりぼやけており、CのlibではなくCLIであるという理由だけでopensslの質問を許可しないと、大きな損失になります。
gtd 2015

@gtd-私がこれらにフラグを立てるとき、それは頻繁な不満です。また、Dev Opsに関する質問どこに投稿すればよいですか?。(しかし、私はこれを間違えたと思います-問題は2011年からであり、それはその時点で話題だったと思います。ポリシーの変更にペナルティを課したくありません)。
jww 2015

2
@gtd-re:「opensslは低レベルのツールキットであり、開発者は常にそれに対処する必要があります。」-それがスーパーユーザーまたはUnix&Linux Stack Exchangeの目的です。「... opensslの質問を許可しないと大きな損失になる...」 -openssl Cプログラミングの質問は常にここで歓迎されます。Stack Overflowはプログラミングと開発のサイトであるため、プログラミング以外の質問がなくなることはありません。コマンドの使用方法がわからない場合は、他にアクセスするサイトがあります。
jww 2015

リンクをありがとうございます。これは非常に重要な問題だと思うので、返信を投稿します。
gtd '16

回答:


123

オプション-nodesは英語の「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を呼び出します。


1
暗号化とは、パスワードを意味しますか?
Flimm 2013

4
@Flimm:はい、パスワードで保護されています。パスワードは鍵導出アルゴリズムを使用して暗号鍵を生成し、暗号化はパスワードではなく鍵を使用して行われます。暗号化されたキーを使用する唯一の方法は、最初にそれを解読することです。そのためには、同じキーを生成するために暗号化されたパスワードを知る必要があります。
個人

秘密鍵ファイルを暗号化する必要があるのはなぜですか?それらのレントは誰にも公開されていないため、その名前が付けられています。それとも私は間違っていますか?
phil294 2018

1
@Blauhirn:ファイルを暗号化するのと同じ理由で秘密鍵ファイルを暗号化します。コピーを取得した人がそれを読み取ったり使用したりできるようにしたくない場合。秘密鍵を暗号化する必要があるかどうかは、鍵の重要性と脅威モデルによって異なります。
個人

12

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

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

ただし、(プログラマーにとって)の目的は次の理由からだと思います。

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

便利:private.keyをロックダウンする

  • { ssl-certグループにHTTPサーバーを追加します}
  • sudo chown root:ssl-cert private.key- をch ANGE 自身のER private.keyをするルートユーザー、SSL-CERTのグループ
  • sudo chmod 640 private.key-private.keyのアクセス許可を所有者R / W、グループRに変更
  • これで、HTTPサーバーは暗号化されていないprivate.keyを起動して読み取ることができるはずです。

オプションA

より強力なセキュリティでありながら、サーバーの再起動時に、encrypted-private.keyのパスフレーズ手動で入力する必要があります

オプションB

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

オプションC

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



1
nginxのはできる:、バージョン1.7.3以降の暗号化秘密鍵を読んで見nginx.org/en/docs/http/...
5lava

2
nginxとそのバージョンをディスカッションに組み込む目的は何ですか?また、(B)と(C)は同等のセキュリティ(ファイルシステムACL)を提供します。あなたが説明している問題は、無人キーストレージの問題であり、解決策のない問題です。GutmannのEngineering Securityブックを参照してください。
jww

@jww質問は「目的は何ですか...」です。質問のコンテキスト(プログラマー向けのQnA)を検討しました。「しかし、(プログラマー向けの)目的は次の理由であると感じています。」特にセキュリティに関する..ことについて議論することsecurity.stackexchange.com
ジェイク・ベルガー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.