询问者
自定义证书验证的问题

问题
-
版主您好:
看了您的传输安全模式之自定义X509Certificate证书验证,自己做了做出了点问题。我设置了自定义,但是不起作用,服务端依然是验证客户端的证书是不是被信任。每次验证无论成功与否,都不会输出Validate方法中的信息,给您贴一下我的配置文件代码,希望您能帮我解答。
<behaviors> <serviceBehaviors> <behavior name="behavior"> <serviceMetadata/> <serviceCredentials> <serviceCertificate findValue="86cd5ecfba6846a44a89f2f06aaff662" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySerialNumber"/> <clientCertificate> <authentication certificateValidationMode="Custom" customCertificateValidatorType="自定义证书验证服务.CustomX509CertificateValidator,自定义证书验证服务"/> </clientCertificate> </serviceCredentials> </behavior> </serviceBehaviors> </behaviors>
<bindings> <wsHttpBinding> <binding name="binding"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding> </bindings>
客户端<bindings> <wsHttpBinding> <binding name="WSHttpBinding_IWCFService"> <security mode="Transport"> <transport clientCredentialType="Certificate"/> </security> </binding> </wsHttpBinding> </bindings> s.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(@"E:\代码\WCF高级编程\wcf安全\利用证书身份验证客户端\catClient.pfx", "123");
另外原来有个问题在上个帖子问了,貌似您没看到。
您好,我看了您的传输安全模式之匿名客户端后按照您的文章做了下,很成功,但是我有几个问题。
1.我在验证服务器证书的回调方法中查看了一下SslPolicyErrors error这个参数,发现这个参数包含RemoteCertificateNameMismatch项,我很奇怪它代表的意思是证书名称不匹配,为什么会出现这种情况?既然不匹配那是不是应该验证失败啊?
全部回复
-
不好意思。我忘记回答了。别介意啊~
1.sslPolicyErrors 是一个枚举类型,主要是表示远程服务器证书验证的错误结果。
None 无 SSL 策略错误。 RemoteCertificateChainErrors ChainStatus 已返回非空数组。 RemoteCertificateNameMismatch 证书名称不匹配。 RemoteCertificateNotAvailable 证书不可用。
我们这里为了调试WCF的传输安全,服务器证书客户端可能存在不信任等问题,这个是临时制作的证书。所以在客户端加了一个RemoteCertificateValidate方法,无论如何都返回True,强制信任服务器证书,这样才能建立SSL连接。
SslPolicyErrors.RemoteCertificateNameMismatch一般是访问的url名字和证书中的cnname名称不一致临时解决办法可以在本地host文件中加入
证书域名 访问IP地址
http://hi.baidu.com/ju_feng/blog/item/36d24358e7ddfbd69d82041d.html
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
1.你下载我的代码。能运行吗?
/Files/frank_xl/2.5.WCFServiceSecurityDemoFrankXuLei_Transport_X.509Certificate_WSHttpBinding.rar
参考一下里面的配置。
主要是配置自定义证书验证的组件。
可以参考一下配置文件
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
消息安全的自定义证书验证,你可以传输安全的对比一下,差别就在安全模式不一样。
也可以从Message_CustomX509Certificate_WSHttpBinding代码修改过来。
自定义部分的配置有些相似
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
你看些这个帖子:
http://topic.csdn.net/u/20080704/17/76f0f565-374c-411c-ab9a-12d5b01411e6.html
服务器上颁发的证书的名字要和你的web域名相同
这个应该就是证书的Subject。
你重新制作一个。
如果还不能解决,在加上服务器IP地址
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
版主您好:
关于传输模式的自定义证书验证我依然没有解决,我把消息模式的代码进行了改变也没有成功,我发现您的WCF分布式安全开发实践(6)传输安全模式之自定义X509Certificate证书验证:Transport_X509Certificate_WSHttpBinding 中,最后执行的结果并不像WCF分布式安全开发实践(12)消息安全模式之自定义X509证书验证Message_CustomX509Certificate_WSHttpBinding 那样,有指纹验证的结果,传输安全模式中,并没有执行指纹验证的代码,我看您播客下面的回复中也有人问到您这个问题,我很是疑惑,望您解答。谢谢! -
谢谢你的提醒。我看了一下代码,确实存在你说的问题。
我再调试一下。尽快给你答复~
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
目前我在翻译WCF技术内幕。这个问题,我还没找出原因。你要是不着急的话,先看一下别的安全编程的例子。
我有时间会继续跟踪原因。
这个帖子,就不要关闭。也算个提醒。
请你多包涵啊。~
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
欢迎访问老徐的中文技术博客:Welcome to My Chinese Technical Blog
欢迎访问微软WCF中文技术论坛:Welcome to Microsoft Chinese WCF Forum
欢迎访问微软WCF英文技术论坛:Welcome to Microsoft English WCF Forum -
顶下 继续研究啊 啊啊啊啊
Frank Xu Lei--谦卑若愚,好学若饥
专注于.NET平台下分布式应用系统开发和企业应用系统集成
Focus on Distributed Applications Development and EAI based on .NET
【老徐的网站】:http://www.frankxulei.com/