Windows Communication Foundation (WCF) のセキュリティは、転送セキュリティ、アクセス制御、監査という 3 つの主要な機能領域に分かれています。 転送セキュリティは、整合性、機密性、および認証を提供します。 転送セキュリティは、トランスポート セキュリティ、メッセージ セキュリティ、または TransportWithMessageCredential
のいずれかによって提供されます。
WCF メッセージ セキュリティの概要については、「セキュリティの 概要」を参照してください。 他の 2 つの WCF セキュリティの詳細については、「 承認 と 監査」を参照してください。
転送におけるセキュリティシナリオ
WCF 転送セキュリティを採用する一般的なシナリオは次のとおりです。
Windows を使用した安全な転送。 WCF クライアントとサービスは、Windows ドメイン (または Windows フォレスト) に展開されます。 メッセージには個人データが含まれているため、要件には、クライアントとサービスの相互認証、メッセージの整合性、メッセージの機密性が含まれます。 さらに、特定のトランザクションが発生したことを証明する必要があります。たとえば、メッセージの受信者は署名情報を記録する必要があります。
UserName
と HTTPS を使用した安全な転送。 WCF クライアントとサービスは、インターネット経由で動作するように開発する必要があります。 クライアント資格情報は、ユーザー名とパスワードのペアのデータベースに対して認証されます。 サービスは、信頼された Secure Sockets Layer (SSL) 証明書を使用して HTTPS アドレスにデプロイされます。 メッセージはインターネット経由で送信されるため、クライアントとサービスを相互に認証し、転送中にメッセージの機密性と整合性を維持する必要があります。証明書を使用した安全な転送。 パブリック インターネット経由で動作するように WCF クライアントとサービスを開発する必要があります。 クライアントとサービスの両方に、メッセージをセキュリティで保護するために使用できる証明書があります。 クライアントとサービスは、インターネットを使用して相互に通信し、メッセージの整合性、機密性、相互認証を必要とする価値の高いトランザクションを実行します。
整合性、機密性、および認証
整合性、機密性、認証の 3 つの機能は、まとめて転送セキュリティと呼ばれます。 転送セキュリティは、分散アプリケーションに対する脅威を軽減するのに役立つ機能を提供します。 次の表では、転送セキュリティを構成する 3 つの機能について簡単に説明します。
機能 | 説明 |
---|---|
誠実 | 整合性 とは、データが完全で正確であることを保証することです。特に、あるポイントから別のポイントに走査した後、多くのアクターによって読み取られた可能性があります。 データの改ざんを防ぐために整合性を維持する必要があり、通常はメッセージのデジタル署名によって実現されます。 |
機密性 | 機密性 とは、メッセージが意図した閲覧者以外の誰にも読まれていないことを保証することです。 たとえば、クレジット カード番号はインターネット経由で送信されるため、機密を保持する必要があります。 機密性は、多くの場合、公開キー/秘密キースキームを使用したデータの暗号化によって提供されます。 |
認証 | 認証 は、要求された ID の検証です。 たとえば、銀行口座を使用する場合、口座の実際の所有者のみが資金を引き出すことが不可欠です。 認証は、さまざまな方法で提供できます。 一般的な方法の 1 つは、ユーザー/パスワード システムです。 2 つ目は、サード パーティによって提供される X.509 証明書の使用です。 |
セキュリティ モード
WCF には、次の表で説明する転送セキュリティのいくつかのモードがあります。
モード | 説明 |
---|---|
無し | トランスポート層またはメッセージ層では、セキュリティは提供されません。 既定では、<basicHttpBinding> 要素、またはコードを使用する場合、BasicHttpBinding クラスを除き、定義済みのバインドではこのモードは使用されません。 |
トランスポート | 整合性、機密性、相互認証に HTTPS などのセキュリティで保護されたトランスポートを使用します。 |
メッセージ | 整合性、機密性、相互認証に SOAP メッセージ セキュリティを使用します。 SOAP メッセージは、WS-Security 標準に従ってセキュリティで保護されます。 |
混合モード | 整合性、機密性、およびサーバー認証にトランスポート セキュリティを使用します。 クライアント認証にメッセージ セキュリティ (WS-Security およびその他の標準) を使用します。 (このモードのこの列挙は TransportWithMessageCredential です)。 |
両方とも | 両方のレベルで保護と認証を実行します。 このモードは、 <netMsmqBinding> 要素でのみ使用できます。 |
資格情報と転送セキュリティ
資格情報は、要求された ID または機能を確立するために提示されるデータです。 資格情報を提示するには、データとデータの所有証明の両方を提示する必要があります。 WCF では、トランスポート セキュリティ レベルとメッセージ セキュリティ レベルの両方で、さまざまな種類の資格情報がサポートされています。 WCF バインディングの資格情報の種類を指定できます。
多くの国または地域では、運転免許証が資格情報の一例です。 ライセンスには、自分の ID と機能を表すデータが含まれています。 所有者の絵の形で所有証明が含まれています。 ライセンスは、信頼できる機関 (通常は政府機関のライセンス部門) によって発行されます。 ライセンスは封印されており、ホログラムを含めることができます。ホログラムは改ざんまたは偽造されていないことを示しています。
たとえば、WCF でサポートされている 2 種類の資格情報 (ユーザー名と (X.509) 証明書の資格情報)を考えてみましょう。
ユーザー名の資格情報の場合、ユーザー名は要求された ID を表し、パスワードは所有証明を示します。 この場合の信頼された機関は、ユーザー名とパスワードを検証するシステムです。
証明書資格情報では、サブジェクト名、サブジェクトの別名、または証明書内の特定のフィールドを使用して、要求された ID や機能を表すことができます。 資格情報内のデータの所有証明は、関連付けられている秘密キーを使用して署名を生成することによって確立されます。
転送セキュリティのプログラミングと資格情報の指定の詳細については、「 バインディングとセキュリティとセキュリティ の 動作」を参照してください。
トランスポート クライアント資格情報の種類
次の表に、転送セキュリティを使用するアプリケーションを作成するときに使用できる値を示します。 これらの値は、コード設定またはバインド設定で使用できます。
設定 | 説明 |
---|---|
無し | クライアントが資格情報を提示する必要がないように指定します。 これは匿名クライアントに変換されます。 |
ベーシック | 基本認証を指定します。 詳細については、RFC2617「HTTP 認証: 基本認証とダイジェスト認証」を参照してください。 |
ダイジェスト | ダイジェスト認証を指定します。 詳細については、RFC2617「HTTP 認証: 基本認証とダイジェスト認証」を参照してください。 |
Ntlm | Windows ドメインで SSPI ネゴシエーションを使用する Windows 認証を指定します。 SSPI ネゴシエーションでは、Kerberos プロトコルまたは NT LanMan (NTLM) が使用されます。 |
ウィンドウズ | Windows ドメインで SSPI を使用する Windows 認証を指定します。 SSPI は、Kerberos プロトコルまたは NTLM から認証サービスとして選択します。 SSPI は最初に Kerberos プロトコルを試みます。失敗した場合は NTLM を使用します。 |
証書 | 証明書 (通常は X.509) を使用してクライアント認証を実行します。 |
メッセージクライアントの資格情報タイプ
次の表は、メッセージ セキュリティを使用するアプリケーションを作成するときに使用できる値を示しています。 これらの値は、コード設定またはバインド設定で使用できます。
設定 | 説明 |
---|---|
無し | サービスが匿名クライアントと対話できるようにします。 |
ウィンドウズ | Windows 資格情報の認証済みコンテキストで SOAP メッセージ交換を実行できるようにします。 SSPI ネゴシエーション メカニズムを使用して、認証サービスとして Kerberos プロトコルまたは NTLM のいずれかを選択します。 |
ユーザー名 | ユーザー名の資格情報を使用してクライアントを認証することをサービスに要求できるようにします。 WCF では、署名の生成やデータの暗号化など、ユーザー名を使用した暗号化操作は許可されないことに注意してください。 そのため、WCF では、ユーザー名の資格情報を使用するときにトランスポートがセキュリティで保護されます。 |
証書 | 証明書を使用してクライアントを認証することをサービスに要求できるようにします。 |
CardSpace | サービスが CardSpace を使用してクライアントを認証することを要求できるようにします。 |
プログラミング資格情報
WCF プログラミング モデルでは、クライアント資格情報の種類ごとに、サービスの動作とチャネルの動作を使用して資格情報の値と資格情報検証コントロールを指定できます。
WCF セキュリティには、サービス資格情報の動作とチャネル資格情報の動作という 2 種類の資格情報があります。 WCF の資格情報の動作では、実際のデータ、つまり、バインディングによって表されるセキュリティ要件を満たすために使用される資格情報を指定します。 WCF では、クライアント クラスは、操作の呼び出しとメッセージの間で変換するランタイム コンポーネントです。 すべてのクライアントは、 ClientBase<TChannel> クラスから継承します。 基底クラスの ClientCredentials プロパティを使用すると、クライアント資格情報のさまざまな値を指定できます。
WCF では、サービスの動作は、サービス コントラクト (インターフェイス) を実装するクラスに適用され、プログラムによってサービスを制御する属性です。 ServiceCredentials クラスを使用すると、さまざまなクライアント資格情報の種類のサービス資格情報とクライアント検証設定の証明書を指定できます。
メッセージ セキュリティのネゴシエーション モデル
メッセージ セキュリティ モードを使用すると、転送セキュリティを実行して、サービス資格情報が帯域外のクライアントで構成されるようにすることができます。 たとえば、Windows 証明書ストアに格納されている証明書を使用している場合は、Microsoft 管理コンソール (MMC) スナップインなどのツールを使用する必要があります。
メッセージ セキュリティ モードでは、転送セキュリティを実行して、サービス資格情報が初期ネゴシエーションの一部としてクライアントと交換されるようにすることもできます。 ネゴシエーションを有効にするには、 NegotiateServiceCredential プロパティを true
に設定します。