分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效。

发布时间:2023-09-06 02:20责任编辑:胡小海关键词:Web

今天写程序的时候调用到一个第三方提供的https地址,访问此地址去获取加密的json格式数据,出现BUG

c#报错 :  System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效。

引用:

private string callbackRefund(string url, string data)
???????{

       HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
???????????  request.Method = "POST";

???????????  byte[] bytes = UTF8Encoding.UTF8.GetBytes(data);
???????????  request.ContentLength = bytes.Length;
???????????  request.ContentType= "application/json";
???????????  long x_ts = GetCurrentTimeUnix();
???????????  request.Headers.Add("x-ts", x_ts.ToString());
???????????  request.Headers.Add("x-hospitalId", "40617");
???????????  request.Headers.Add("x-sig", "kinyer_debug_sign");
???????????  using (Stream requestStream = request.GetRequestStream())
???????????  {
???????????????    foreach (byte b in bytes)
???????????????    {
???????????????????      requestStream.WriteByte(b);
???????????????    }
???????????  }

???????????  using (WebResponse response = request.GetResponse())
???????????  {
???????????????    using (Stream responseStream = response.GetResponseStream())
???????????????    {
???????????????????      byte[] responseContent;
???????????????????      using (MemoryStream ms = new MemoryStream())
???????????????????      {
???????????????????????        responseStream.CopyTo(ms);
???????????????????????        responseContent = ms.ToArray();
???????????????????      }
???????????????????    return UTF8Encoding.UTF8.GetString(responseContent);
???????????????    }
???????????  }

 }

 解决方法:

步骤一:定义一个类,来对远程X.509证书的验证,进行处理,返回为true.我们要自己定义一个类,然后在客户单调用WCF服务之前,执行一次即可。代码如下:

 public static class Util
    {
        /// <summary>
        /// Sets the cert policy.
        /// </summary>
        public static void SetCertificatePolicy()
        {
            ServicePointManager.ServerCertificateValidationCallback
                       += RemoteCertificateValidate;
        }

        /// <summary>
        /// Remotes the certificate validate.
        /// </summary>
        private static bool RemoteCertificateValidate(
           object sender, X509Certificate cert,
            X509Chain chain, SslPolicyErrors error)
        {
            // trust any certificate!!!
            System.Console.WriteLine("Warning, trust any certificate");
            return true;
        }
    }
 
步骤二:   你要在HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);调用操作点前先调用这个方法: Util.SetCertificatePolicy();

这样实现了远程访问https地址   项目部署在win2012 2R上可用

System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException: 根据验证过程,远程证书无效。

原文地址:https://www.cnblogs.com/bzsz-quan/p/9897979.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved