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,如需轉載請自行聯系原作者