WCF のメッセージのセキュリティ
Windows Communication Foundation (WCF) には、セキュリティを提供するための 2 つの主要なモード (Transport
と Message
) と、2 つのモードを組み合わせた 3 番目のモード (TransportWithMessageCredential
) があります。 ここでは、メッセージ セキュリティとその必要性について説明します。
メッセージ セキュリティとは
メッセージ セキュリティでは、メッセージをセキュリティで保護するために WS-Security 仕様を使用します。 WS-Security 仕様では、トランスポート レベルではなく、SOAP メッセージ レベルで機密性、整合性、および認証を確保するための、SOAP メッセージングの機能拡張が規定されています。
簡単に言えば、メッセージ セキュリティでは、メッセージごとにセキュリティ資格情報とクレームが署名や暗号化などのメッセージ保護措置と共にカプセル化さるという点で、トランスポート セキュリティと異なります。 メッセージの内容を変更してメッセージに直接セキュリティを適用することによって、セキュリティで保護されたメッセージは、セキュリティ面で自己完結する形になります。 これによって、トランスポート セキュリティでは実現できないシナリオが可能になります。
メッセージ セキュリティを使用する理由
メッセージ レベルのセキュリティでは、すべてのセキュリティ情報がメッセージ内にカプセル化されます。 トランスポート レベルのセキュリティではなく、メッセージ レベルのセキュリティを使用してメッセージをセキュリティで保護することによって、次の利点を得ることができます。
エンドツーエンドのセキュリティ。 SSL (Secure Sockets Layer) などのトランスポート セキュリティは、通信が Point-to-Point の場合にのみメッセージを保護します。 メッセージが最終の受信者に到達する前に 1 つ以上の SOAP 中継局 (ルーターなど) にルーティングされる場合、中継局でネットワークからメッセージが読み取られると、そのメッセージ自体は保護されない状態になります。 また、クライアントの認証情報は最初の中継局しか使用できず、必要に応じて帯域外の方法で、最終の受信者にその情報を転送する必要があります。 これは、経路全体で各ホップ間に SSL セキュリティを使用している場合にも当てはまります。 メッセージ セキュリティはメッセージに直接作用し、メッセージ内の XML をセキュリティで保護するので、メッセージが最終の受信者に到達するまでに経由する中継局の数に関係なく、メッセージをセキュリティで保護できます。 これによって、真の意味でエンド ツー エンドのセキュリティ シナリオが実現します。
柔軟性の向上。 メッセージ全体ではなく、メッセージの一部を署名または暗号化できます。 つまり、中継局は、その中継局に対して用意されたメッセージの一部を確認できます。 メッセージ内の情報の一部を中継局に渡す必要があり、メッセージの改ざんを確実に防止する必要もある場合は、メッセージを暗号化せずに署名だけを行うことができます。 署名はメッセージの一部なので、最終の受信者は受信メッセージ内の情報が元のままの状態であることを確認できます。 シナリオの 1 つとして、Action ヘッダーの値に従ってメッセージをルーティングする SOAP 中継局サービスが考えられます。 既定では、WCF でメッセージ セキュリティを使用した場合、Action 値は暗号化されず、署名されます。 この情報はすべての中継局で使用できますが、変更はできなくなります。
複数のトランスポートに対するサポート。 複数のトランスポートに対するサポート : セキュリティ用のプロトコルに依存することなく、名前付きパイプ、TCP などの複数の異なるトランスポートを経由して、セキュリティで保護されたメッセージを送信できます。 トランスポート レベルのセキュリティでは、すべてのセキュリティ情報の有効範囲が 1 つの特定のトランスポート接続に限定されるので、メッセージの内容からその情報を使用することはできません。 メッセージ セキュリティでは、メッセージの送信に使用するトランスポートの種類に関係なく、メッセージがセキュリティで保護されます。セキュリティ コンテキストはメッセージの内部に直接埋め込まれます。
資格情報とクレームのセットを広範囲にサポート。 メッセージ セキュリティは、SOAP メッセージの内部で任意の種類のクレームを送信できる拡張可能なフレームワークを提供する WS-Security 仕様に基づいています。 トランスポート セキュリティとは異なり、使用できる認証機構またはクレームはトランスポートの機能によって制限されません。 WCF のメッセージ セキュリティには、複数の種類の認証とクレームの送信があります。必要に応じて、追加の種類がサポートされるように拡張できます。 このため、たとえば、フェデレーション資格情報シナリオは、メッセージ セキュリティなしでは実現できません。 WCF でサポートされるフェデレーション シナリオの詳細については、「フェデレーションと発行済みトークン」を参照してください。
メッセージ セキュリティとトランスポート セキュリティの比較
トランスポート レベルのセキュリティの利点と欠点
トランスポート セキュリティの利点は次のとおりです。
通信元と通信先では XML レベルのセキュリティ概念を理解する必要がありません。 このため、たとえば、通信のセキュリティ保護に HTTPS が使用されている場合に相互運用性が向上します。
パフォーマンスが全般的に向上します。
ハードウェア アクセラレータを使用できます。
ストリーミングが可能です。
トランスポート セキュリティの欠点は次のとおりです。
セキュリティが提供されるのはホップからホップのみです。
資格情報のセットが制限され、拡張はできません。
トランスポートに依存します。
メッセージ レベルのセキュリティの欠点
メッセージ セキュリティの欠点は次のとおりです。
パフォーマンス
メッセージ ストリーミングを使用できません。
XML レベルのセキュリティ機構の実装と WS-Security 仕様のサポートが必要です。 これは、相互運用性に影響する可能性があります。