web-dev-qa-db-ja.com

マイクロサービス間でTLSを実装する方法

私が検討しているマイクロサービスのセキュリティ設計について、誰かがコメント、獣医、批評、またはその他の方法で穴をあけてもらえますか?

3つのマイクロサービスがあり、それぞれがRESTエンドポイントを介して他の2つのサービスと通信します。各マイクロサービスにはキーストアが含まれています。このキーストアには、信頼できるサービスによって署名されたマイクロサービスのプライベート/パブリックキーペアがありますまた、このキーストアには、ソースマイクロサービスの署名済み/信頼できる鍵ペアからエクスポートされた、他の2つのマイクロサービスの公開鍵証明書があります。

この実装は機能しますが、何かについてはあまりにおいがしません。

つまり、新しいマイクロサービスを導入するたびに、a)既存の各マイクロサービスの公開鍵証明書をキーストアに追加し、b)新しいマイクロサービスの公開鍵証明書を他のすべてのマイクロサービスに追加する必要があります(新しいマイクロサービスであるという前提で、双方向で通信する必要があります)。および安全に、既存の各マイクロサービスで)。

次に、上記のパターンを2番目のキーペアについて繰り返します。これは、REST呼び出しで提供される認証トークンの署名/検証に使用されます。

上記の代わりに、a)推奨されており、b)すべてのマイクロサービス間で単一の信頼された公開鍵証明書を共有しても安全ですか?何か完全に違う?

丁寧にお願いします。私はこの分野の専門家ではありません。

編集:元の投稿への返信/コメントを読んだ後、問題をより明確にする可能性のある詳細を省略したため、コメンターがより適切に対処できるようになりました。

  1. 問題のマイクロサービスはプライベートイントラネット内に存在し、そのイントラネット内のクライアント(ブラウザーまたはその他のマイクロサービス)からのみアクセスできます。

  2. 実際には信頼できるCA(つまり、このイントラネットを所有する会社)が存在し、マイクロサービスのキーペアに署名するのはそのCAです。

この問題に対する解決策は、@ Andreasの最初のコメントに暗示されているようです。彼は、「問題を発行したCAが信頼されている限り、それらも信頼されます」と書いています。

新しい各マイクロサービスがa)CAによって署名された独自のキーペア(1つは署名用、もう1つは暗号化用)、およびb)CAの証明書を使用してデプロイされている限り、安全に通信できる合理的な保証で新しいマイクロサービスをデプロイできます他のすべてのマイクロサービス(私が認識していない他の潜在的な脆弱性のために合理的です)。

どういうわけか、各マイクロサービスのキーペアに対してまったく新しい証明書を作成し、それらを他のマイクロサービスのキーストアに含める必要があると思いました(新しいマイクロサービスごとに繰り返します)。代わりに、必要なのは1つの証明書、つまり各マイクロサービスのキーストア内のキーペアに署名するCAの証明書だけです。

9
divaconhamdip

それを行う1つの方法(あなたの質問は広範囲であり、コードがないと、ここよりもSoftwareEngineeringのトピックのほうが多いかもしれません)は次のとおりです。

  1. 独自のCAを作成する
  2. (オプション、マイクロサービス専用のサブCAを作成します)
  3. このCAによるすべての証明書を生成する
  4. 証明書自体をチェックするのではなく、コードがこのCAからのすべての証明書を信頼するようにします(ただし、日付や正しい署名などをチェックする必要があります)。

このように、新しいマイクロサービスを導入すると、生成する証明書は1つだけで、他のマイクロサービスでは何も変更されません。これは、達成する必要がある目標であり、それ以外の場合は管理できません。

このようにすることで、必要に応じて、マイクロサービスの一部をシステムの外に移動することもできます。それらは、CA公開鍵とともに出荷される必要があるだけです。

問題が発生するだけなので、同じ証明書を異なるマイクロサービスに再利用しないことをお勧めします。

また、大まかに関連していますが、必ずこれを読んでください: https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf Webの外部でTLSを使用すると、さまざまな落とし穴が表示されます。目を見張るものです。このインターネットドラフト( https://datatracker.ietf.org/doc/draft-gutmann-tls-lts/ )は、特にTLSのみを対象としており、PKIの問題は対象としていませんが、いくつかの安全なデフォルトの選択でTLS1.2を適切に実装する方法。 「LTS」の部分は特に「長期サポート」を意味します。

この関連する質問も見てください: https://security.stackexchange.com/questions/175627/securing-internal-micro-services-letsencrypt-vs-self-signed-certificates-be andボールトの使用など、他のアイデアを提供する答え。

6
Patrick Mevzek

マイクロサービスがWebに公開されていない場合は、その目的のために自己署名証明書を作成できます。自己署名証明書はイントラコールに使用されます。sslshopperサイトで作成できます。

また、すべてのマイクロサービスに同じ証明書を使用しないでください。同様のソリューションを実装しましたが、この場合、他のマイクロサービスに対応する別のマイクロサービスとして署名済みサービスを設定しました。この自己署名サービスは、HSMまたはハードウェアセキュリティモジュールに接続します。すべての証明書は、所属するHSM内に保存されますHSMでグーグルして、プロファイルを作成できます。

トラストストアは、公開証明書を保持するために使用され、キーストアは、秘密キーを格納するために使用されます。これは、ユニバーサルではなく、理想的なシナリオの標準です。

2