アプリケーション間の通信を保護する方法を探しています。一部のTCP=ポートでリッスンしている「サーバー」アプリケーションと「サーバー」と通信している「クライアント」アプリケーションがあります。両方のアプリケーションは実際にいくつかのサーバーにインストールされています。複数の負荷が存在する可能性があります-これらのアプリケーションのバランスの取れたインスタンス。
「サーバー」が通信が「クライアント」アプリケーションからのものであることを確実に確認できるように、SSL証明書の使用は正しい方法ですか?どのように機能しますか?すべてのアプリケーションに独自の証明書が必要ですか?証明書はどこに保存されますか?同様のソリューションが議論されているリソースがあれば、私はそれを感謝します。
This.joshからの回答が好きですが、追加したい点がいくつかありました。
一般に、クライアントとサーバーの両方で提供された証明書のすべての要素を確認することは、このチャネルに接続しているエンティティが、それがそうであると主張するエンティティであることを保証するための最良の方法です。典型的なメカニズムは次のとおりです。
認証v。承認
Authentication-それが言うエンティティは本当ですか?これは、資格情報が有効な身元証明である限り当てはまります。私が16歳であっても、運転免許証は私の居住国から適切に発行されたものであれば有効です。ただし、酒類によって許可されているわけではありません(米国に住んでいる場合、少なくとも21歳でなければなりません)。
Authorizationエンティティは、やりたいことを実行できますか? 21歳以上であれば酒を購入することができます。技術的には21歳以上で十分ですが、運転免許証、パスポート、または州発行のIDを認証することで証明できます。
両方が必要なようです。あなたは、それぞれの側がそのアイデンティティを証明し(認証)、特定の制限付きグループ(会社によって作成された)である必要があります。したがって、TLSクライアント認証だけでなく、承認を確認するための基準をチェックする追加の方法が必要です。
私はそれに取り組むいくつかの方法を考えることができます:
信頼できるユーザーのリストを設定する-PKIを使用する場合、一般的な方法は、各クライアントまたはサーバーのサブジェクトDN(識別名)のリストです。スケーラビリティは、このリストを保存する場所に直接関連しています。つまり、LDAPサーバーのようなパブリックストアは、すべてのサーバーが共通の場所を確認できるようにするのに適しています。
証明書に品質があることを確認します-DNの組織の価値が頭に浮かびます-これは通常、エンティティが由来する組織を説明する値です。たとえば、私の個人のデジタル証明書では、会社がそれらを取得するために支払ったので、会社の名前が "O"値になります。次に、いくつかの追加コードを作成して(または非常にスマートなサーバーでは、構成するだけです...)、「O =your company "-そして、あなたは大丈夫です-あなたの会社の名前が" O "の値で他の誰もが証明書を作成できないことを保証できる限り。そのための1つの方法は、そのCAプロバイダーとの契約とアカウントを設定し、社内に指定された承認担当者が事務処理を行う、上位の商用証明機関の一部です。その人は、CAが証明書を作成する前に、証明書の各要求が会社からのものであることを証明します。独自のCAを実行して同じことを行うことができます-基本的に、時間とお金のトレードオフです。
警告:ここでは多くの詳細を説明しています。 「安全性の高い」認証と承認の管理方法とそれらの管理方法を理解することは、常勤の仕事です。実際、それは業界全体です。ここで取り上げているのは、最低限の努力の草の根の概念です。何百万、何十億ドルもの企業の投資、または人間の生命、あるいは私たちが知っている世界の状態を保護するために何かをまとめていると私に言った場合-私はオフラインで私に連絡するように言って、私はこの問題をあなたの手から取り除くことができる便利な賢い人々の素敵なチーム...有料で。どんなシステムも最も弱いリンクと同じくらい強いだけなので、このものをチェックすることに関するすべての通信と手順は慎重に処理する必要があるので、エリア全体がかなり速く鶏と卵のシナリオになります。私がここで投げているのは、あなたが巨大なものを何も持っていないことを前提としています、あなたはほとんどほんの少しの保護を必要とする新しいシステムに取り組んでいます-あなたの家の周りにニースゲートを投げるのと同等です。門ではなく、番犬、防犯カメラ、スパイクされたクラブを持つ大きな男ではありません。 :)
現在...キーストレージ
キーストレージには2つの主要な要素があります。
「安全」は、多くの場合、FIPSコンプライアンスレベルで評価されます。これは、キーストレージメカニズムをテストする方法であり、エスカレートするセキュリティ要件の特定のセットを満たします。ローエンドはソフトウェアストレージです。キーは1つを使用します商業的にサポートされているいくつかのストレージメカニズムの1つであり、ハードドライブに搭載されています(価格=無料、またはハードドライブのわずかなメモリの価格)。ハイエンドは大きくて高価なボックス(HSM-ハードウェアセキュリティモジュール)です。誰も箱から鍵を取り出せないような方法であなたの鍵を保持します...いつまでも...そして彼らがしようとすると、彼らがあまりにも頑張ると、箱は自分自身を消滅させ、鍵を消去します。の間に。
どれだけの安全性を支払いたいかは、完全にリスク/コストの決定です。何を失う必要があるか、何を支払うかを計算する必要があります。
「アクセス方法」にはいくつかの要素があります。
すべての場合において、証明書はどこにでも保存できます。これらは、広範囲に配布できる公開情報です。重要な要素は秘密鍵です。秘密鍵は、それを使用するエンティティのみがアクセスできる場所に格納する必要があります。
単一の証明書を使用できるユーザー
それは、キーをどのように保存するか、そしてどのようなリスクを受け入れるかによって異なります。ネットワークアクセス可能なHSMのキーは、技術的にはサーバーのバンクで使用できます。これにより、すべてのサーバーを1つのサーバーのように見せることができます(Webアプリにはかなり便利です)。ただし、特定のアクションを実行したクライアントまたはサーバーを正確に証明する必要がある場合は、エンティティごとに1つの証明書が必要です。また、失効できるのは証明書のみです。つまり、キーストアが侵害されたと思われる場合に、1つだけ無効にできるレベルの分離が必要です。
一般的に、秘密鍵を複数の場所に配置していることに気付いた場合、それはチェックポイントです。これは重大なリスクであり、別の証明書を取得したいという優れた指標です。そこから、分離のレベルはIMOです。ほとんどの場合、追跡するレベルと、アクセスを制御するために必要なその他のニーズの問題です。
はい、おそらく使用します トランスポート層セキュリティ(TLS) Secure Sockets Layer(SSL)の代わりに使用します。これは、よく使用され、レビューされたネットワーク通信セキュリティだからです。証明書の部分は、公開/秘密鍵のペアと派生データの生成、配布、ユーザー、および廃棄を含む公開鍵インフラストラクチャです。
認証されたサーバーとのみ通信するクライアントアプリケーションのプロトタイプを作成しているようです。リモートサーバーの認証は、単に通信チャネルを保護することとは異なります。証明書を使用してサーバーを認証する場合でも同じ証明書を使用して通信チャネルを保護し、サーバーを認証することはできません。
認証の1つの方法は、チャレンジレスポンスプロトコルです。一般的なチャレンジレスポンスプロトコルは Secure Remote Password(SRP) です。 SRPは多くの言語とプラットフォームでアクセスできます。
「すべてのアプリケーションに独自の証明書が必要ですか?」各クライアントを一意に認証する必要があるかどうかによって異なります。一意の認証が必要だと判断した場合は、キーイングの負担を理解する必要があります。必要なキーの数は、クライアントの数に直接比例します。 10人のクライアントにとってこれは負担にならないかもしれませんが、1万人にとっては困難です。
答える必要があります:
「証明書はどこに保存されますか?」
ほとんどのオペレーティングシステムとプラットフォームでは、キーストレージメカニズムが組み込まれています。