阿不

不抛弃,不放弃

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  158 随笔 :: 0 文章 :: 2073 评论 :: 66 Trackbacks

在.NET调用加了SSL验证的WebService可让我费了不少心思。要使用SSL证书加密,必须要根据证书创建X509Certificate实例,添加到WebService实例的ClientCertificates集合属性中:

string certificateFile = AppDomain.CurrentDomain.BaseDirectory + @"\certificate.cer"; System.Security.Cryptography.X509Certificates.X509Certificate certificate = System.Security.Cryptography.X509Certificates.X509Certificate.CreateFromCertFile(certificateFile); creatinoService.ClientCertificates.Add(certificate);

 

但是我这里,调用却会提示出现:The remote certificate is invalid according to the validation procedure.异常,它的内部异常是WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel。通过网络资源找到了解决方案:

using System.Net; using System.Security.Cryptography.X509Certificates; public class MyPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint , X509Certificate certificate , WebRequest request , int certificateProblem) { //Return True to force the certificate to be accepted. return true; } // end CheckValidationResult } // class MyPolicy System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

 

通过上面的代码,马上就解决了我的问题。

但是由于是使用.NET 2.0,它会提示你CertificatePolicy 属性已经过期了,我们可以使用下面的回调方式来替代它:

System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(RemoteCertificateValidationCallback);

 

增加一个静态回调函数:

public static bool RemoteCertificateValidationCallback( Object sender, X509Certificate certificate, X509Chain chain, System.Net.Security.SslPolicyErrors sslPolicyErrors ) { //Return True to force the certificate to be accepted. return true; }

 

你会发现,这样同样也能解决这个问题。

相关文章:

http://blog.joycode.com/mvm/archive/2006/03/25/734...

http://blog.jerrysherman.com/PermaLink,guid,c26899...

阿不 http://hjf1223.cnblogs.com
posted on 2007-03-14 13:47 阿不 阅读(1261) 评论(4)  编辑 收藏

评论

......
  回复  引用    

#2楼  2008-07-06 22:21 朋友 [未注册用户]
朋友能讨论下这个问题么调用加了SSL签名的WebService ?请留下你的QQ或联系方式。或者你加我44981987
  回复  引用    

#3楼  2008-08-01 14:14 小赵2 [未注册用户]
朋友,能不能把你源代码放出来哦.我按你的操作,会提示creatinoService.ClientCertificates.Add(certificate); 这一句有误.我现在也不知道怎么解决了. 谢谢.....
  回复  引用    

#4楼 [楼主] 2008-08-01 14:25 阿不      
实际上,标准的SSL证书是需要一个第三方的证书认证中心的。而我这边这样做是因为我的证书不是经过第三方认证的,是自己搭建的证书服务器,这时要让证书能够正确使用,就要重写第三方认证的方法,否则无法通过验证证书的有效性。
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-06-05 16:18 编辑过


相关链接: