web-dev-qa-db-ja.com

nginxによるSSL証明書の秘密鍵の保護

Webサーバーとしてnginxを使用してSSL証明書のプライベートキーを保護する方法を調査してきましたが、満足のいく答えを見つけることができませんでした。

具体的には、自分のサブドメインでWebサイトを展開したいクライアントの場合、誰かが自分のサブドメインの証明書の秘密キーにアクセスして、正当に見える安全でないWebサイトをセットアップするのを恐れています。彼らは私に彼らの秘密鍵を保護するためにある種のソフトウェア保管庫ソリューションを使用するように頼みました。

この記事 nginxのブログおよび this one はいくつかの解決策を説明していますが、最終的にはどちらも同じ原則に依存しています。秘密鍵はパスフレーズによって保護されています。ローカルまたはリモートの場所から取得します。この「取得」手順では、ローカルに保存されているパスワード/トークンが必要です。

したがって、私は秘密鍵が本当に安全になる方法を理解できません。それは、マットの下に置くのではなく、キーボックスのフロントドアの鍵をロックするようなものに見えます...そして、キーボックスの鍵をマットの下に置くのです。

何か不足していますか? nginxで秘密鍵を保護するより良い方法はありますか?

2
Buno

あなたの最後のコメントに基づいて、私はいくつかのオプションを見ます:

  • IPホワイトリストアクセス、パスワードログインなしなど、SSHセキュリティが優れていることを示しています。
  • たとえば、/etc/sslのどこかにあるように、秘密鍵ファイルはrootユーザーのみが読み取り可能で、ドキュメントルートの外部に保存されていることを示しています。ホストされたwebsiteをハッキングすることは、サーバー全体よりもはるかに一般的であり、そのようにして、そのように読み取られることに対する保護があります。
  • 上記のポイントについて:Dockerコンテナーの実行に注意してください。それらは通常rootとして実行され、私の意見ではセキュリティの問題です。 Dockerコンテナcanルートレスで実行(実験的)ですが、イメージはそうするように特別に設計する必要があります。あなたが他の場所で取得するほとんどの画像は、ルートであることによって異なります。ルートとして実行されているその中の何かは、刑務所を壊す可能性があります。 (編集:それは確かに再評価後にいくつかのニュアンスを必要とします。私は言うべきですcould刑務所を破ります。それは、安全であるいくつかの追加のメカニズムに依存します。 )
  • 彼らが本当に心配なら、彼らはあなたのサーバーへのリバースプロキシをセットアップするべきであり、彼らは彼らの側でSSL終了をすることができます。

また、SSL証明書の提供についても説明します。 Letsencryptをセットアップするだけです。追加のボーナスは、これらの証明書は有効期間が短いことです。

3
Halfgaar

1つの解決策がありますが、実際には、サーバーを信頼する必要はありません。あなたのクライアントが彼の記録をあなたのサーバーに置くことをいとわないなら、彼はどういうわけかあなたを信頼しなければなりません。クライアントを保護するソリューションが1つあります。

  • Cloudflare のように、サブドメインがWeb Application Firewallをポイントします。それらは、Origin証明書(サーバー上にあるもの)を作成し、GPGなどの信頼できる通信プロトコルを介して証明書とキーを送信します。

  • 彼らはこのサブドメインがあなたのサーバーのIPアドレスを指すようにします。

  • 彼らはCloudflareアカウントへのアクセス権を付与しない

そのすべてを維持します。エッジ証明書を制御します。それらはOrigin証明書を制御します。彼らはいつでもそれを取り消すことができます。彼らはドメインを管理しています。唯一のことは、クライアントが制御しないのはもちろんサーバーです。 ;)

もちろん、@ Halfgaarによって提示されたセキュリティ設定全体はまだ最新です。

————————————————————-

信頼関係を構築したい場合は、サーバーからの監査を表示できます。監査ログを提示します。サーバーのセキュリティが [〜#〜] nism [〜#〜] または [〜#〜] stigs [〜#〜] のような標準に準拠していることを証明します。

2
limakzi
  • すべてはコメントと回答で隠されています。
    合算したい場合、証明書を盗むだけでは十分ではありません。攻撃者はまた、証明書が検証された有効なドメインを考え出す必要があります。

  • フィッシング攻撃の場合、ウェブサイトは同じように見えるかもしれませんが、
    ドメインは同じではない可能性があり、証明書は別のドメインでは機能しません。

  • DNSが正しいIPを指していて、DNSが偽装されたり乱れたりしていない限り、SSL証明書を盗むことは役に立ちません。

  • クライアントが多少疑わしいこの状況では、期間が短い証明書を暗号化しましょう
    有効期間(90日)。そして定期的に更新する必要があります。

  • 証明書を取得して更新する証明書を暗号化するには、毎回ドメインの確認が必要です。したがって、証明書を盗むことは、長い間役に立ちません。

2
mandar