憑證驗證的傳輸安全性
以下案例示範使用 X.509 憑證予以保護的 Windows Communication Foundation (WCF) 用戶端和服務。每個用戶端都有能夠用於用戶端安全通訊端層 (SSL) 驗證以及受服務信任的憑證。此範例將示範要求/回覆訊息模式。
如需 使用憑證和服務的詳細資訊,請參閱使用憑證和 HOW TO:使用 SSL 憑證設定連接埠。
特性 | 描述 |
---|---|
安全性模式 |
傳輸 |
互通性 |
使用現有 Web 服務用戶端和服務。 |
驗證 (伺服器) 驗證 (用戶端) |
是 (使用 HTTPS) 是 (使用憑證) |
完整性 |
是 |
機密性 |
是 |
傳輸 |
HTTPS |
繫結 |
服務
下列程式碼和組態要獨立執行。執行下列任一步驟:
- 使用不含組態的程式碼建立獨立服務。
- 使用提供的組態建立服務,但不要定義任何端點。
程式碼
以下程式碼會示範如何建立使用傳輸安全性和憑證的服務端點。
組態
可以使用下列組態取代程式碼來設定服務:
<bindings>
<wsHttpBinding>
<binding name="CertificateWithTransport">
<security mode="Transport">
<transport clientCredentialType="Certificate"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="ServiceModel.Calculator"
behaviorConfiguration="credentialConfig" >
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="CertificateWithTransport"
contract="ServiceModel.ICalculator" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="credentialConfig">
<serviceCredentials>
<clientCertificate trustedStoreLocation="LocalMachine"
revocationMode="Online"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
用戶端
下列程式碼和組態要獨立執行。執行下列其中一項:
- 使用此程式碼 (和用戶端程式碼) 建立獨立用戶端。
- 建立未定義任何端點位址的用戶端,然後改用可接受組態名稱當做引數的用戶端建構函式。例如:
程式碼
下列程式碼會建立用戶端。繫結會設定為使用傳輸模式安全性,採用 TCP 傳輸,並將用戶端認證類型設為 Windows。
組態
以下組態程式碼適用於用戶端,而且同樣會指定憑證位置和用來尋找其位置的值。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="credentialConfiguration">
<clientCredentials>
<clientCertificate findValue="Contoso.com"
storeLocation="CurrentUser"
x509FindType="FindBySubjectName" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_ICalculator">
<security mode="Transport">
<transport clientCredentialType="Certificate" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="https://machineName/Calculator"
behaviorConfiguration="credentialConfiguration"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_ICalculator"
contract="ICalculator"
name="WSHttpBinding_ICalculator" />
</client>
</system.serviceModel>
</configuration>