天天看點

WCF NetTcpBinding Transport安全模式(9) ClientCredentialType證書驗證模式----Custom驗證模式WCF NetTcpBinding Transport安全模式(9)   ClientCredentialType證書驗證模式----Custom驗證模式

   Custom驗證模式提供了更靈活的可定制的證書驗證方式,當需要自定義驗證的時候,可以采用這種方式。以下代碼是修改用戶端驗證為“Custom”模式後的相關配置。

設定用戶端對服務端憑據驗證模式為“Custom”:

    <serviceCertificate >

       <authentication certificateValidationMode="Custom"  

              customCertificateValidatorType="WcfSecurityExampleServiceLibrary.MyX509CertificateValidator,

              WcfSecurityExampleServiceLibrary" />

            </serviceCertificate>

如以上代碼所示,配置“Custom”驗證模式需要指定自定義的驗證程式,本例中類型為“WcfSecurityExampleServiceLibrary.MyX509CertificateValidator”,名稱空間為“WcfSecurityExampleServiceLibrary”,實作的代碼如代碼清單11-25所示。

代碼清單11-24    自定義驗證程式

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;    

using System.IdentityModel.Selectors;

namespace WcfSecurityExampleServiceLibrary

{

    public class MyX509CertificateValidator : X509CertificateValidator

    {

        public override void Validate(System.Security.Cryptography.X509Certificates.X509Certificate2 certificate)

        {

            if (certificate.SerialNumber.ToLower() != "9414bfe12286dc874b631a702c7d2ad9")

                throw new Exception("Certificate  Error!");

        }

    }

}

以上代碼給出了一個最簡單的實作自定義驗證的示例。首先,實作自定義驗證程式的類必須要繼承X509CertificateValidator抽象類,然後根據實際情況重寫Validate方法。本例中,簡單地判斷服務端證書的序列号是否符合預期。初始情況下,要驗證的序列号和服務端證書的序列号不符,運作結果如圖11-19所示。

圖11-14        自定義驗證異常

從圖11-19中可以看出,當服務端的證書序列号和自定義驗證程式要求的不一緻的時候,抛出了自定義的異常資訊。下面将自定義驗證程式的預期序列号調整為何服務端證書一緻,運作結果如圖11-20所示。

圖11-15        正确的自定義驗證

--------------注:本文部分内容改編自《.NET 安全揭秘》

本文轉自玄魂部落格園部落格,原文連結:http://www.cnblogs.com/xuanhun/archive/2012/06/24/2560105.html,如需轉載請自行聯系原作者

繼續閱讀