Chinaunix首页 | 论坛 | 博客
  • 博客访问: 979246
  • 博文数量: 78
  • 博客积分: 1473
  • 博客等级: 上尉
  • 技术积分: 2124
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-23 12:50
文章分类

全部博文(78)

文章存档

2016年(6)

2015年(2)

2014年(13)

2013年(4)

2012年(53)

分类: 嵌入式

2012-06-24 15:44:02

 

   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 安全揭秘》

阅读(1429) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~