HOW TO:建立使用自訂憑證驗證程式的服務
這個主題將示範如何實作自訂憑證驗證程式,以及如何設定用戶端或服務認證,以使用自訂憑證驗證程式來取代預設的憑證驗證邏輯。
如果使用 X.509 憑證來驗證用戶端或服務,根據預設,Windows Communication Foundation (WCF) 會使用 Windows 憑證存放區和 Crypto API 來驗證憑證及確保它是受信任的。有時內建的憑證驗證功能不足,而必須變更。WCF 提供一種簡單的方法,可允許使用者新增憑證驗證程式以變更驗證邏輯。如果指定了自訂憑證驗證程式,WCF 便不會使用內建的憑證驗證邏輯,而會改用自訂驗證程式。
程序
建立自訂憑證驗證程式
請定義從 X509CertificateValidator 衍生的新類別。
實作抽象的 Validate 方法。必須驗證的憑證會傳遞為方法的引數。如果根據驗證邏輯,傳遞的憑證是無效的,這個方法會擲回 SecurityTokenValidationException。如果憑證是有效的,方法會傳回至呼叫者。
注意: 若要將驗證錯誤傳回至用戶端,請在 Validate 方法中擲回 FaultException。
在服務組態中指定自訂憑證驗證程式
將 <behaviors> 項目和 serviceBehaviors section加入至 <system.ServiceModel> 項目。
新增 Behavior element,然後將 name 屬性設定為適當的值。
將 <serviceCredentials> Element加入至 <behavior> 項目。
將 <clientCertificate> 項目加入至 <serviceCredentials> 項目。
將 <authentication> of <clientCertificate> Element加入至 <clientCertificate> 項目。
將 customCertificateValidatorType 屬性設定為驗證程式類型。下列範例會將屬性設定為類型的命名空間和名稱。
將 certificateValidationMode 屬性設定為 Custom。
<configuration> <system.serviceModel> <behaviors> <serviceBehaviors> <behavior name="ServiceBehavior"> <serviceCredentials> <clientCertificate> <authentication certificateValidationMode="Custom" customCertificateValidatorType="Samples.MyValidator, service" /> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
使用用戶端上的組態來指定自訂憑證驗證程式
將 <behaviors> 項目和 serviceBehaviors section加入至 <system.ServiceModel> 項目。
新增 <endpointBehaviors> 項目。
加入 <behavior> 項目,並將 name 屬性設定為適當值。
新增 <clientCredentials> 項目。
新增 <authentication> of <serviceCertificate> Element,如下列範例所示。
將 customCertificateValidatorType 屬性設定為驗證程式類型。
將 certificateValidationMode 屬性設定為 Custom。下列範例會將屬性設定為類型的命名空間和名稱。
<configuration> <system.serviceModel> <behaviors> <endpointBehaviors> <behavior name="clientBehavior"> <clientCredentials> <serviceCertificate> <authentication certificateValidationMode="Custom" customCertificateValidatorType= "Samples.CustomX509CertificateValidator, client"/> </serviceCertificate> </clientCredentials> </behavior> </endpointBehaviors> </behaviors> </system.serviceModel> </configuration>
使用服務上的程式碼來指定自訂憑證驗證程式
請在 ClientCertificate 屬性上指定自訂憑證驗證程式。您可以使用 Credentials 屬性來存取服務認證。
將 CertificateValidationMode 屬性設定為 Custom。
使用用戶端上的程式碼來指定自訂憑證驗證程式
請使用 CustomCertificateValidator 屬性來指定自訂憑證驗證程式。您可以使用 Credentials 屬性來存取用戶端認證。(由 ServiceModel Metadata Utility Tool (Svcutil.exe) 產生的用戶端類別永遠是衍生自 ClientBase 類別)。
將 CertificateValidationMode 屬性設定為 Custom。
範例
描述
下列範例將示範在服務上實作自訂憑證驗證程式及其使用方式。