共用方式為


<<customBinding 的安全性>>

指定自訂繫結的安全性選項。

<configuration>
  <system.serviceModel>
    <bindings>
      <customBinding>
        <繫結>
          <安全性>

語法

<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,而且可以使用 XML 格式單純表示為 Default。 此屬性的型別為 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 屬性

Description
String AnonymousForCertificate

AnonymousForSslNegotiated

CertificateOverTransport

IssuedToken

IssuedTokenForCertificate

IssuedTokenForSslNegotiated

IssuedTokenOverTransport

Kerberos

KerberosOverTransport

MutualCertificate

MutualCertificateDuplex

MutualSslNegotiated

SecureConversation

SspiNegotiated

UserNameForCertificate

UserNameForSslNegotiated

UserNameOverTransport

SspiNegotiatedOverTransport

defaultAlgorithm 屬性

Description
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
<localClient 設定> 指定此繫結之本機用戶端的安全性設定。 此項目的型別為 LocalClientSecuritySettingsElement
<localService 設定> 指定此繫結之本機服務的安全性設定。 此項目的型別為 LocalServiceSecuritySettingsElement
<secureConversationBootstrap> 指定用於啟始安全對話服務的預設值。

父項目

元素 描述
<繫結> 定義自訂繫結的所有繫結功能。

備註

如需使用此元素的詳細資訊,請參閱 SecurityBindingElement 驗證模式如何:使用 SecurityBindingElement 建立自定義系結

範例

下列範例示範如何使用自訂繫結設定安全性。 它會顯示如何使用自訂繫結同時啟用訊息層級安全性和安全傳輸。 當在用戶端和服務之間傳輸訊息需要安全傳輸,且同時必須保護訊息層級上訊息的安全時,這是相當有用的。 系統提供的繫結不支援這個組態。

服務組態定義的自訂繫結,使用 TLS/SSL 通訊協定和 Windows 訊息安全性,支援受保護的 TCP 通訊。 自訂繫結使用服務憑證來驗證傳輸層級上的服務,並在用戶端和服務之間進行傳輸時保護訊息。 這是由 <sslStreamSecurity> 綁定項完成。 服務的憑證是使用服務行為來設定。

此外,自訂繫結使用 Windows 認證類型 (預設認證類型) 的訊息安全性。 這是由 安全性 綁定項完成。 如果可以使用 Kerberos 驗證機制,則會使用訊息層級安全性來驗證用戶端和服務。 如果 Kerberos 驗證機制無法使用,則使用 NTLM 驗證。 NTLM 會對服務驗證用戶端,但不會對用戶端驗證服務。 安全性綁定項設定為使用 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>

另請參閱