A-A+

通过SSL\HTTPS调用WebService

2014年11月15日 技术 暂无评论 阅读 5,223 次

当前为了满足安全需要,大量的网站纷纷开始使用SSL\HTTPS方式提供对外服务,与此同时,很多WebService也会通过这种安全模式提供给外部使用。通过visual studio添加Web引用时,其实方式方法并没有变化,如果WebService的格式正确,并且正常发布,引用时最多会提示证书不正确,最终还是能够获取到服务的。主要是调用时,按环境的不同,也许会产生各种各样的异常,在发生异常时,可以按照以下步骤来尝试解决:

1.添加代码,忽略证书错误提示:

  1. //在调用WebService之前插入此代码段,忽略一切证书问题
  2. ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((a, b, c, d) =>
  3. {
  4.     return true;
  5. });
  6. //使用WebService
  7. using (LoginServiceClient loginClient = new LoginServiceClient())
  8. {
  9. }

2.下载证书,导入证书:

点击“开始”,在“搜索程序和文件”区域输入“mmc”并回车,在呼出的控制台中选择“文件”->“添加/删除管理单元”,从左侧添加“证书”,然后点击“确定“,选择“计算机账户”->“本地计算机”->“完成”,选择“受信任的根证书颁发机构”,右键菜单中选择“所有任务”->“导入”,导入该站点服务所使用的证书。

一般情况下,在这两步操作之后,都能够正常的使用WebService。当然了,特殊情况肯定存在,以下解决办法以供参考,特殊情况肯定需要特殊分析。

1.尝试检查WebService提供的源格式是否符合规范。我遇到的过这样的问题,在使用visual studio时就无法获取到服务,后来使用命令行工具生成了代理类,但是用遍各种办法就是无法正常调用,总是提示“请求被中断,未能为SSL/TLS建立安全通道”,最终换了台服务器重装了产品后,发现产品提供的Web服务终于正常,不再报错。

2.读取证书,随请求一起发送。这一块只能给出HttpWebRequest相关的示例代码,我也没有这样尝试过,但是在查找相关资料时,发现HttpWebRequest访问HTTPS的站点也会出现这样的问题,有人曾经获取客户端证书并随之发送,最后解决了问题,也许这个思路可以帮助我们。

  1. //直接使用固定地址的证书生成 
  2. X509Certificate objx509 = new X509Certificate(@"C:\Test.crt");
  3. //查找个人证书下符合条件的证书
  4. X509Store store = new X509Store(StoreName.My.ToString(),StoreLocation.LocalMachine);
  5. //只读打开
  6. store.Open(OpenFlags.ReadOnly);
  7. //获取此证书存储区的证书集合
  8. X509Certificate2Collection certificates = store.Certificates;
  9. //查找证书
  10. X509Certificate2Collection certificates2 = certificates.Find(X509FindType.FindBySubjectName, "Test"false);
  11. //HttpWebRequest示例代码
  12. HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(url);
  13. webRequest.Method = "POST";
  14. webRequest.ContentType = "text/xml; charset=utf-8";
  15. webRequest.ClientCertificates.Add(objx509);
  16. webRequest.ClientCertificates.Add(certificates2[0]);

3.指定安全协议。

  1. ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;

4.如果以上都不能解决问题,可以试试这篇文章提供的方法。

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: