web-dev-qa-db-ja.com

信頼できないCAを信頼する-システムがそれを信頼する方法を制限できますか?

(私はそれがプログラミングコードよりもOS構成に関係していると感じているため、StackOverflowではなくServerFaultに投稿されます)。

私は現在、サードパーティのWebサービスに接続するシステムの保守を担当しています。このWebサービスは、十分に公平なクライアント認証証明書を必要としますが、Webサービス自体は、自己作成ルート認証局証明書(クライアント認証証明書を作成するのと同じルート)によって作成された自己署名証明書で保護されます。

現在のサービス証明書を既知の信頼済みリストに追加し、自己作成の認証局証明書を無視するだけで十分です。残念ながら、サービス証明書は定期的に変更されるため、認証局証明書を信頼して、アプリケーションが壊れないようにする必要があります。サービス証明書を更新しました。

ただし、私はWebサービスを実行している会社での経験に基づいて(個人的に)CA証明書を信頼していません-Webに漏洩したとしても驚かないでしょう-心配なことに、CA証明書にはキー使用制限が課されていません(外部のMITM攻撃が可能ですが、リモートではありますが、たとえば、コード署名に使用されるリークされた証明書の方が心配です)。

コンピューター(現在はサーバーボックスですが、将来の通常のデスクトップクライアントボックス)にCAを信頼するように指示することはできますか?ただし、特定のキー使用法のセットと可能なサブジェクト名(ドメイン名) )?

サーバーは現在Windows Server 2012 R2ですが、デスクトップマシンはすべてWindowsボックスですが、Linuxボックスで実行できます。

33
Dai

はい、可能です。 Windowsの場合、相互認証または限定従属と呼ばれる機能があります。

あなたの環境でサードパーティの発行CA証明書に署名するという考え方です。その結果、リモートSSL証明書は独自のルートCA証明書にチェーンされます。起こり得る不正な証明書から身を守るために、受け入れ可能な名前のリストを指定するName Constraints証明書拡張機能を実装します。サードパーティのCAが他の名前(名前制約拡張で明示的に指定されていない)の証明書を発行する場合、CryptoAPIプロバイダーによって自動的に拒否されます。

名前の制約に加えて、クロス証明書でApplication Policies証明書拡張を定義することにより、拡張キー使用法の制約を記述することができます。そのため、信頼プロバイダーは、Application Policies拡張で指定された使用法のみを正常に検証します。

詳細: Windows Server 2003を使用した相互認証と限定従属の計画と実装

pSこの記事はWindows Server 2003を対象に書かれていますが、この記事は最新のWindows Serverバージョンにも適用されます。

42
Crypt32