加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

调用Https WebService发布后使用时报“基础连接已经关闭: 未能为

发布时间:2020-12-17 02:04:14 所属栏目:安全 来源:网络整理
导读:? 调用Https WebService发布后使用时报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系”证书验证失败的解决过程(3) 2010-03-23 20:03 by 苏飞,0 visits, 网摘 , 收藏 , 编辑 HttpRequest访问Https带有证书并使用WSDL文档生成代理类方案 ? HttpR

?

调用Https WebService发布后使用时报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系”证书验证失败的解决过程(3)

2010-03-23 20:03 by 苏飞,0 visits,网摘,收藏,编辑

HttpRequest访问Https带有证书并使用WSDL文档生成代理类方案

?

HttpRequest访问Https带有证书并使用WSDL文档生成代理类方案(2)

?

?

前面的文章说了怎么实现代理类的生成我使用。

在使用的过程 中我又碰到了一个很棘手的问题这是我的代码

?

?

代码
? // 官方查询结果xml
????????[WebMethod?]
????????
public ??OrderNciis?GetNciisResult( string ?onName,? string ?onId)
????????{
????????????
// 获取授权文件
???????????? string ?inLicense? = ?LotteryMethods.GetContext( 11 );

????????????
// 生成的WSDL类()
????????????nciicGetCondition?objText? = ? new ?nciicGetCondition();

????????????
// 获取基础URL
????????????objText.Url? = ?LotteryMethods.GetContext( 12 );

????????????
// 编码
????????????objText.RequestEncoding? = ?Encoding.UTF8;

????????????
// 创建证书文件
????????????X509Certificate?objx509? = ? new ?X509Certificate(System.Configuration.ConfigurationSettings.AppSettings[ " cd " ].ToString().Trim());

????????????
// 证书
????????????objText.ClientCertificates.Add(objx509);

????????????
// 方式可有可无
????????????objText.UserAgent? = ? " Client?Cert?Sample " ;

????????????
// 读XML文件
???????????? string ?inConditions? = ?OrderNciisXml(onName,?onId);

????????????
// 返回查询结果XML
????????????OrderNciis?model? = ? new ?OrderNciis();
????????????model.onLottery?
= ?objText.nciicCheck(inLicense,?inConditions);
????????????
return ?model;
????????}

?

?? 代码应该是没有问题,在本地的Vs里测试没有问题,如果在ISS里使用时报基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系”证书验证失败

城刚开始我还以为是文章路径的问题,结果不是,

接着找,后来认为是IIS里配置问题,还是不对,后来,看到??网上也有很多这的问题,但是没有真正解决的,一般都 是在说怎么生成代理类,还有带有证书的过程

?

我想了想,还是自己想办法解决吧,我把代理类分析了一下才知道 ,原来证书是在代理类里验证的,验证后会返回一个值 表示是否通过,这就好看了,

我们定义一个方法

??

代码
private ? static ? bool ?RemoteCertificateValidate( object ?sender,?X509Certificate?cert,?X509Chain?chain,?SslPolicyErrors?error){
????????????
// ?trust?any?certificate!!!
????????????System.Console.WriteLine( " Warning,?trust?any?certificate " );
????????????
// 为了通过证书验证,总是返回true
???????????? return ? true ;
????}



?

只要这个方法返回为True不就完了吗?呵呵

还需要几个命名空间

?

using ?System.Net;
????
using ?System.Net.Security;
????
using ?System.Security.Authentication;
????
using ?System.Security.Cryptography.X509Certificates;

?

?

这个应该在什么时候调用呢,当然 是在构造器里合适些

?

代码
? /// ? <remarks/>
???????? public ?nciicGetCondition()
????????{

????????????
// 验证服务器证书回调自动验证
????????????ServicePointManager.ServerCertificateValidationCallback? += ?RemoteCertificateValidate;
????????}

?

?

?

?????????????????????????

???????????????????????????? ?如有转载请注明出处谢谢合作!!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读