Share via


<customBinding> の <security>

カスタム バインディングのセキュリティ オプションを指定します。

スキーマの階層

<system.serviceModel>
  <bindings>
    <customBinding>
      <binding>
        <customBinding> の <security>

構文

<security 
   allowSerializedSigningTokenOnReply="Boolean"
   authenticationMode="AuthenticationMode"
      defaultAlgorithmSuite="SecurityAlgorithmSuite"
   includeTimestamp="Boolean"
      requireDerivedKeys="Boolean"
   keyEntropyMode="ClientEntropy/ServerEntropy/CombinedEntropy" 
messageProtectionOrder="SignBeforeEncrypt/SignBeforeEncryptAndEncryptSignature/EncryptBeforeSign"
      messageSecurityVersion="WSSecurityJan2004/WSSecurityXXX2005"
   requireDerivedKeys="Boolean"
   requireSecurityContextCancellation="Boolean"
   requireSignatureConfirmation="Boolean"
      securityHeaderLayout=
              "Strict/Lax/LaxTimestampFirst/LaxTimestampLast"
   includeTimestamp="Boolean">
   <issuedTokenParameters />
   <localClientSettings />
   <localServiceSettings />
   <secureConversationBootstrap />
</security>

属性と要素

以降のセクションでは、属性、子要素、および親要素について説明します。

属性

属性 説明

allowSerializedSigningTokenOnReply

省略可能。シリアル化されたトークンを応答で使用できる場合に指定するブール値。既定値は false です。二重バインドを使用する場合、この設定の既定値は true に設定され、行った設定はすべて無視されます。

authenticationMode

省略可能。イニシエーターとレスポンダーの間で使用される認証モードを指定します。すべての値については、以下を参照してください。

既定値は sspiNegotiated です。

defaultAlgorithmSuite

省略可能。メッセージの暗号化とキー ラップ アルゴリズムを設定します。アルゴリズムとキー サイズは、SecurityAlgorithmSuite クラスにより決まります。これらのアルゴリズムは、Security Policy Language (WS-SecurityPolicy) の仕様で指定されているアルゴリズムに対応付けられています。

指定できる値を以下に示します。既定値は、Basic256 です。

この属性は、既定とは異なるアルゴリズムのセットを選択する別のプラットフォームで操作するときに使用されます。この設定を修正する場合、関連するアルゴリズムの強さと脆弱性に注意する必要があります。この属性は SecurityAlgorithmSuite 型です。

includeTimestamp

各メッセージにタイム スタンプが含まれるかどうかを指定するブール値です。既定値は true です。

keyEntropyMode

メッセージをセキュリティで保護するキーを計算する方法を指定します。キーは、クライアント キー マテリアルのみ、サービス キー マテリアルのみ、または両方の組み合わせに基づいて生成できます。有効な値は、以下のとおりです。

  • ClientEntropy: セッション キーは、クライアントから提供されるキー データに基づいています。

  • ServerEntropy: セッション キーは、サーバーから提供されるキー データに基づいています。

  • CombinedEntropy: セッション キーは、クライアントとサービスから提供されるキー データに基づいています。

既定値は CombinedEntropy です。

この属性は SecurityKeyEntropyMode 型です。

messageProtectionOrder

メッセージ レベルのセキュリティ アルゴリズムをメッセージに適用する順序を設定します。有効な値は次のとおりです。

  • SignBeforeEncrypt: 最初に署名してから暗号化します。

  • SignBeforeEncryptAndEncryptSignature: 最初に署名してから暗号化し、次に署名を暗号化します。

  • EncryptBeforeSign: 最初に暗号化してから署名します。

既定値は、使用している WS-Security のバージョンによって異なります。WS-Security 1.1 を使用する場合、既定値は SignBeforeEncryptAndEncryptSignature です。WS-Security 1.0 を使用する場合、既定値は SignBeforeEncrypt です。

この属性は MessageProtectionOrder 型です。

messageSecurityVersion

省略可能です。使用される WS-Security のバージョンを設定します。有効な値は次のとおりです。

  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11

  • WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10

  • WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10

既定は、WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11 であり、単純に Default として XML で表現できます。この属性は MessageSecurityVersion 型です。

requireDerivedKeys

キーを元の証明キーから派生できる場合に指定するブール値。既定値は true です。

requireSecurityContextCancellation

省略可能。セキュリティ コンテキストが不要になったときにそれをキャンセルして終了する必要がある場合に指定するブール値。既定値は true です。

requireSignatureConfirmation

省略可能。WS-Security 署名確認を有効にするかどうかを指定するブール値です。true に設定されている場合、メッセージ署名が応答側で確認されます。カスタム バインディングが相互証明書に対して構成されているか、発行されたトークンを使用するように構成されている場合 (WSS 1.1 バインド)、この属性の既定値は true です。それ以外の場合、既定値は false になります。

サービスが要求を完全に認識して応答していることを確認するために、署名確認を使用します。

securityHeaderLayout

省略可能。セキュリティ ヘッダーでの要素の順序を指定します。有効な値は、以下のとおりです。

  • Strict : "使用前に宣言する" という一般的な方針に従って、項目がセキュリティ ヘッダーに追加されます。

  • Lax: WSS: SOAP メッセージ セキュリティに準じた任意の順序で、項目はセキュリティ ヘッダーに追加されます。

  • LaxWithTimestampFirst: WSS: SOAP メッセージ セキュリティに準じた任意の順序で、項目はセキュリティ ヘッダーに追加されます。ただし、セキュリティ ヘッダーの最初の要素は wsse:Timestamp 要素である必要があります。

  • LaxWithTimestampLast: WSS: SOAP メッセージ セキュリティに準じた任意の順序で、項目はセキュリティ ヘッダーに追加されます。ただし、セキュリティ ヘッダーの最後の要素は wsse:Timestamp 要素である必要があります。

既定値は Strict です。

この要素は SecurityHeaderLayout 型です。

子要素

要素 説明

<issuedTokenParameters>

現在発行されているトークンを指定します。この要素は IssuedTokenParametersElement 型です。

<localClientSettings> 要素

このバインディングのローカル クライアントのセキュリティ設定を指定します。この要素は LocalClientSecuritySettingsElement 型です。

<localServiceSettings> 要素

このバインディングのローカル サービスのセキュリティ設定を指定します。この要素は LocalServiceSecuritySettingsElement 型です。

<secureConversationBootstrap>

セキュリティで保護されたメッセージ交換サービスの開始に使用される既定値を指定します。

親要素

要素 説明

<binding>

カスタム バインディングのすべてのバインディング機能を定義します。

解説

この要素の使い方詳細情報、「SecurityBindingElement Authentication Modes」および「How To: Create a Custom Binding Using the SecurityBindingElement」を参照してください。

次の例では、カスタム バインディングを使用してセキュリティを構成する方法を示します。カスタム バインディングを使用して、セキュリティで保護されたトランスポートと共にメッセージ レベルのセキュリティを有効にする方法を示します。これは、クライアントとサービス間でメッセージを転送する際にセキュリティで保護されたトランスポートが必要であると同時に、そのメッセージをメッセージ レベルでセキュリティ保護する必要がある場合に便利です。この構成は、システム指定のバインディングではサポートされていません。

サービス構成では、TLS/SSL プロトコルを使用して保護される TCP 通信、および Windows メッセージ セキュリティをサポートするカスタム バインディングが定義されます。カスタム バインディングはサービス証明書を使用して、トランスポート レベルでサービスを認証し、クライアントとサービス間で転送中のメッセージを保護します。これは <sslStreamSecurity> バインディング要素によって実現されます。サービスの証明書は、サービス動作を使用して構成されます。

さらに、カスタム バインディングは Windows 資格情報の種類 (既定の資格情報の種類) によるメッセージ セキュリティを使用します。これは <customBinding> の <security> バインディング要素によって実現されます。Kerberos 認証機構が利用できる場合は、クライアントとサービスはどちらもメッセージ レベルのセキュリティを使用して認証されます。Kerberos 認証機構が利用できない場合は、NTLM 認証が使用されます。NTLM はサービスに対してクライアントを認証しますが、クライアントに対するサービスの認証は行いません。<customBinding> の <security> バインディング要素は SecureConversation authenticationType を使用するように構成されます。この結果、クライアントとサービスの両方でセキュリティ セッションが作成されます。これは、サービスの双方向コントラクトを動作させるために必要です。この例の実行の詳細については、「Custom Binding Security」を参照してください。

<configuration>
  <system.serviceModel>
    <services>
      <service 
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
        <host>
          <baseAddresses>
            <!-- use following base address -->
            <add baseAddress="net.tcp://localhost:8000/ServiceModelSamples/Service"/>
          </baseAddresses>
        </host>
        <endpoint address=""
                    binding="customBinding"
                    bindingConfiguration="Binding1" 
                    contract="Microsoft.ServiceModel.Samples.ICalculatorDuplex" />
        <!-- the mex endpoint is exposed at net.tcp://localhost:8000/ServiceModelSamples/service/mex -->
        <endpoint address="mex"
                  binding="mexTcpBinding"
                  contract="IMetadataExchange" />
      </service>
    </services>

    <bindings>
      <!-- configure a custom binding -->
      <customBinding>
        <binding name="Binding1">
          <security authenticationMode="SecureConversation"
                     requireSecurityContextCancellation="true">
          </security>
          <textMessageEncoding messageVersion="Soap12WSAddressing10" writeEncoding="utf-8"/>
          <sslStreamSecurity requireClientCertificate="false"/>
          <tcpTransport/>
        </binding>
      </customBinding>
    </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata />
          <serviceDebug includeExceptionDetailInFaults="False" />
          <serviceCredentials>
            <serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/>
          </serviceCredentials>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

参照

リファレンス

<customBinding>
SecurityElement
SecurityBindingElement
CustomBinding

その他のリソース

Windows Communication Foundation Bindings
Extending Bindings
Custom Bindings
How To: Create a Custom Binding Using the SecurityBindingElement
Custom Binding Security