<customBinding> の <security>

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

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

構文

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

属性および要素

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

属性

属性 説明
allowSerializedSigningTokenOnReply 任意。 シリアル化されたトークンを応答で使用できる場合に指定するブール値。 既定値は false です。 二重バインドを使用する場合、この設定の既定値は true に設定され、行った設定はすべて無視されます。
authenticationMode 任意。 イニシエーターとレスポンダーの間で使用される認証モードを指定します。 すべての値については、以下を参照してください。

既定では、 sspiNegotiatedです。
defaultAlgorithmSuite 任意。 メッセージの暗号化とキー ラップ アルゴリズムを設定します。 アルゴリズムとキー サイズは、SecurityAlgorithmSuite クラスにより決まります。 これらのアルゴリズムは、セキュリティ ポリシー言語 (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 型です。

authenticationMode 属性

[値] 説明
String AnonymousForCertificate

AnonymousForSslNegotiated

CertificateOverTransport

IssuedToken

IssuedTokenForCertificate

IssuedTokenForSslNegotiated

IssuedTokenOverTransport

Kerberos

KerberosOverTransport

MutualCertificate

MutualCertificateDuplex

MutualSslNegotiated

SecureConversation

SspiNegotiated

UserNameForCertificate

UserNameForSslNegotiated

UserNameOverTransport

SspiNegotiatedOverTransport

defaultAlgorithm 属性

[値] 説明
Basic128 Aes128 暗号化を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic192 Aes192 暗号化を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic256 Aes256 暗号化を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic256Rsa15 メッセージの暗号化には Aes256 を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa15 を使用します。
Basic192Rsa15 メッセージの暗号化には Aes192 を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa15 を使用します。
TripleDes TripleDes 暗号化を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic128Rsa15 メッセージの暗号化には Aes128 を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa15 を使用します。
TripleDesRsa15 TripleDes 暗号化を使用し、メッセージ ダイジェストには Sha1 を、キー ラップには Rsa15 を使用します。
Basic128Sha256 メッセージの暗号化には Aes128 を、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic192Sha256 メッセージの暗号化には Aes192 を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic256Sha256 メッセージの暗号化には Aes256 を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa-oaep-mgf1p を使用します。
TripleDesSha256 メッセージの暗号化には TripleDes を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa-oaep-mgf1p を使用します。
Basic128Sha256Rsa15 メッセージの暗号化には Aes128 を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa15 を使用します。
Basic192Sha256Rsa15 メッセージの暗号化には Aes192 を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa15 を使用します。
Basic256Sha256Rsa15 メッセージの暗号化には Aes256 を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa15 を使用します。
TripleDesSha256Rsa15 メッセージの暗号化には TripleDes を使用し、メッセージ ダイジェストには Sha256 を、キー ラップには Rsa15 を使用します。

子要素

要素 説明
<issuedTokenParameters> 現在発行されているトークンを指定します。 この要素は IssuedTokenParametersElement 型です。
<localClientSettings> このバインディングのローカル クライアントのセキュリティ設定を指定します。 この要素は LocalClientSecuritySettingsElement 型です。
<localServiceSettings> このバインディングのローカル サービスのセキュリティ設定を指定します。 この要素は LocalServiceSecuritySettingsElement 型です。
<secureConversationBootstrap> セキュリティで保護されたメッセージ交換サービスの開始に使用される既定値を指定します。

親要素

要素 説明
<binding> カスタム バインドのすべてのバインド機能を定義します。

解説

この要素の使用方法の詳細については、「SecurityBindingElement 認証モード」および「方法 : SecurityBindingElement を使用してカスタム バインドを作成する」を参照してください。

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

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

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

<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>

関連項目