次の方法で共有


トランスポート セキュリティの概要

Windows Communication Foundation (WCF) のトランスポート セキュリティ メカニズムは、使用されているバインディングとトランスポートによって異なります。 たとえば、 WSHttpBinding クラスを使用する場合、トランスポートは HTTP であり、トランスポートをセキュリティで保護するための主要なメカニズムは、HTTP 経由の Secure Sockets Layer (SSL) (一般に HTTPS と呼ばれます) です。 このトピックでは、WCF システム提供のバインディングで使用される主要なトランスポート セキュリティ メカニズムについて説明します。

.NET Framework 3.5 以降で SSL セキュリティを使用する場合、WCF クライアントは、証明書ストア内の中間証明書と SSL ネゴシエーション中に受信した中間証明書の両方を使用して、サービスの証明書に対する証明書チェーン検証を実行します。 .NET Framework 3.0 では、ローカル証明書ストアにインストールされている中間証明書のみが使用されます。

Warnung

トランスポート セキュリティを使用すると、 Thread.CurrentPrincipal プロパティが上書きされる可能性があります。 これを回避するには、 ServiceAuthorizationBehavior.PrincipalPermissionModePrincipalPermissionMode.Noneに設定します。 ServiceAuthorizationBehavior は、サービスの説明で設定できるサービス動作です。

BasicHttpBinding

既定では、 BasicHttpBinding クラスはセキュリティを提供しません。 このバインディングは、セキュリティを実装しない Web サービス プロバイダーとの相互運用性を目的として設計されています。 ただし、Noneを除く任意の値に Mode プロパティを設定することで、セキュリティをオンにすることができます。 トランスポート セキュリティを有効にするには、プロパティを Transport に設定します。

IIS との相互運用

BasicHttpBinding クラスは、主に既存の Web サービスとの相互運用に使用され、それらのサービスの多くはインターネット インフォメーション サービス (IIS) によってホストされます。 そのため、このバインディングのトランスポート セキュリティは、IIS サイトとのシームレスな相互運用のために設計されています。 これを行うには、セキュリティ モードを Transport に設定し、クライアント資格情報の種類を設定します。 資格情報の種類の値は、IIS ディレクトリのセキュリティ メカニズムに対応します。 次のコードは、設定されているモードと、Windows に設定されている資格情報の種類を示しています。 この構成は、クライアントとサーバーの両方が同じ Windows ドメイン上にある場合に使用できます。

BasicHttpBinding b = new BasicHttpBinding();
b.Security.Mode = BasicHttpSecurityMode.Transport ;
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
Dim b As BasicHttpBinding = New BasicHttpBinding()
b.Security.Mode = BasicHttpSecurityMode.Transport
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

または、構成で次の手順を実行します。

<bindings>  
  <basicHttpBinding>  
    <binding name="SecurityByTransport">  
      <security mode="Transport">  
        <transport clientCredentialType="Windows" />  
       </security>  
     </binding>  
  </basicHttpBinding>  
</bindings>  

以降のセクションでは、他のクライアント資格情報の種類について説明します。

ベーシック

これは、IIS の基本認証方法に対応します。 このモードを使用する場合、IIS サーバーは Windows ユーザー アカウントと適切な NTFS ファイル システムのアクセス許可で構成する必要があります。 IIS 6.0 の詳細については、「 基本認証の有効化と領域名の構成」を参照してください。 IIS 7.0 の詳細については、「 基本認証の構成 (IIS 7)」を参照してください。

証書

IIS には、クライアントに証明書でのログオンを要求するオプションがあります。 この機能により、IIS はクライアント証明書を Windows アカウントにマップすることもできます。 IIS 6.0 の詳細については、「 IIS 6.0 でのクライアント証明書の有効化」を参照してください。 IIS 7.0 の詳細については、「IIS 7 でのサーバー証明書の構成」を参照してください。

ダイジェスト

ダイジェスト認証は基本認証に似ていますが、クリア テキストではなく、ハッシュとして資格情報を送信する利点があります。 IIS 6.0 の詳細については、「 IIS 6.0 のダイジェスト認証」を参照してください。 IIS 7.0 の詳細については、「 ダイジェスト認証の構成 (IIS 7)」を参照してください。

ウィンドウズ

これは、IIS の統合 Windows 認証に対応します。 この値に設定すると、Kerberos プロトコルをドメイン コントローラーとして使用する Windows ドメインにもサーバーが存在することが想定されます。 サーバーが Kerberos ベースのドメイン上にない場合、または Kerberos システムが失敗した場合は、次のセクションで説明する NT LAN Manager (NTLM) 値を使用できます。 IIS 6.0 の詳細については、「 IIS 6.0 の統合 Windows 認証」を参照してください。 IIS 7.0 の詳細については、「IIS 7 でのサーバー証明書の構成」を参照してください。

NTLM

これにより、Kerberos プロトコルが失敗した場合に、サーバーで認証に NTLM を使用できるようになります。 IIS 6.0 での IIS の構成の詳細については、「 NTLM 認証の強制」を参照してください。 IIS 7.0 の場合、Windows 認証には NTLM 認証が含まれます。 詳細については、「 IIS 7 でのサーバー証明書の構成」を参照してください。

WsHttpBinding

WSHttpBinding クラスは、WS-* 仕様を実装するサービスとの相互運用用に設計されています。 このバインディングのトランスポート セキュリティは、HTTP または HTTPS 経由の Secure Sockets Layer (SSL) です。 SSL を使用する WCF アプリケーションを作成するには、IIS を使用してアプリケーションをホストします。 または、セルフホステッド アプリケーションを作成する場合は、HttpCfg.exe ツールを使用して、X.509 証明書をコンピューター上の特定のポートにバインドします。 ポート番号は、エンドポイント アドレスとして WCF アプリケーションの一部として指定されます。 トランスポート モードを使用する場合、エンドポイント アドレスに HTTPS プロトコルを含める必要があります。または、実行時に例外がスローされます。 詳細については、「 HTTP トランスポート セキュリティ」を参照してください。

クライアント認証の場合は、HttpTransportSecurity クラスの ClientCredentialType プロパティを、HttpClientCredentialType列挙値のいずれかに設定します。 列挙値は、 BasicHttpBinding のクライアント資格情報の種類と同じであり、IIS サービスでホストされるように設計されています。

次の例は、Windows のクライアント資格情報の種類で使用されているバインドを示しています。

// The code uses a shortcut to specify the security mode to Transport.
WSHttpBinding b = new WSHttpBinding(SecurityMode.Transport);
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
' The code uses a shortcut to specify the security mode to Transport.
Dim b As WSHttpBinding = New WSHttpBinding(SecurityMode.Transport)
b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows

WSDualHttpBinding

このバインディングでは、メッセージ レベルのセキュリティのみが提供され、トランスポート レベルのセキュリティは提供されません。

NetTcpBinding

NetTcpBinding クラスは、メッセージ 転送に TCP を使用します。 トランスポート モードのセキュリティは、TCP 経由でトランスポート層セキュリティ (TLS) を実装することによって提供されます。 TLS の実装は、オペレーティング システムによって提供されます。

次のコードに示すように、TcpTransportSecurity クラスのClientCredentialType プロパティをTcpClientCredentialType値のいずれかに設定して、クライアントの資格情報の種類を指定することもできます。

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType =
TcpClientCredentialType.Certificate;
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate

顧客

クライアントでは、X509CertificateInitiatorClientCredential クラスの SetCertificate メソッドを使用して証明書を指定する必要があります。

Windows セキュリティを使用している場合、証明書は必要ありません。

次のコードでは、証明書を一意に識別する拇印を使用します。 証明書の詳細については、「証明書の使用」を参照してください。

NetTcpBinding b = new NetTcpBinding();
b.Security.Mode = SecurityMode.Transport;
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate;
EndpointAddress a = new EndpointAddress("net.tcp://contoso.com/TcpAddress");
ChannelFactory<ICalculator> cf = new ChannelFactory<ICalculator>(b, a);
cf.Credentials.ClientCertificate.SetCertificate(
    StoreLocation.LocalMachine,
    StoreName.My,
    X509FindType.FindByThumbprint,
    "0000000000000000000000000000000000000000");
Dim b As NetTcpBinding = New NetTcpBinding()
b.Security.Mode = SecurityMode.Transport
b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate
Dim a As New EndpointAddress("net.tcp://contoso.com/TcpAddress")
Dim cf As ChannelFactory(Of ICalculator) = New ChannelFactory(Of ICalculator)(b, a)
cf.Credentials.ClientCertificate.SetCertificate( _
    StoreLocation.LocalMachine, _
    StoreName.My, _
    X509FindType.FindByThumbprint, _
    "0000000000000000000000000000000000000000")

または、behaviors セクションの <clientCredentials> 要素を使用して、クライアントの構成で証明書を指定します。

<behaviors>  
  <behavior>  
   <clientCredentials>  
     <clientCertificate findValue= "101010101010101010101010101010000000000"
      storeLocation="LocalMachine" storeName="My"
      X509FindType="FindByThumbPrint">  
     </clientCertificate>  
   </clientCredentials>  
 </behavior>  
</behaviors>

NetNamedPipeBinding

NetNamedPipeBinding クラスは、効率的なコンピューター内通信を実現するように設計されています。つまり、同じコンピューター上で実行されているプロセスに対しては、名前付きパイプ チャネルを同じネットワーク上の 2 台のコンピューター間で作成できます。 このバインディングでは、トランスポート レベルのセキュリティのみが提供されます。 このバインディングを使用してアプリケーションを作成する場合、エンドポイント アドレスには、エンドポイント アドレスのプロトコルとして "net.pipe" を含める必要があります。

WSFederationHttpBinding

トランスポート セキュリティを使用する場合、このバインディングでは、発行されたトークン (TransportWithMessageCredential) で HTTPS と呼ばれる HTTP 経由の SSL が使用されます。 フェデレーション アプリケーションの詳細については、「 フェデレーショントークンと発行済みトークン」を参照してください。

NetPeerTcpBinding

NetPeerTcpBinding クラスは、ピアツーピア ネットワーク機能を使用した効率的な通信用に設計されたセキュリティで保護されたトランスポートです。 クラスとバインディングの名前で示されているように、TCP はプロトコルです。 セキュリティ モードがトランスポートに設定されている場合、バインディングは TCP 経由の TLS を実装します。 ピア ツー ピア機能の詳細については、「 ピア ツー ピア ネットワーク」を参照してください。

MsmqIntegrationBinding と NetMsmqBinding

メッセージ キュー (以前は MSMQ) を使用したトランスポート セキュリティの詳細については、「 トランスポート セキュリティを使用したメッセージのセキュリティ保護」を参照してください。

こちらも参照ください