SSL问题:NetCore HttpClient The SSL connection could not be established, see inner exception

NetCore HttpClient The SSL connection could not be established, see inner exception

之前遇到一个问题

 

https://www.cnblogs.com/leoxjy/p/10201046.html

 

在centos 7.x  HttpClient访问会出问题  The SSL connection could not be established, see inner exception

最后彻底解决是进入容器docker

那么 最近又翻墙搜到一个解决方案 可以systemctl 运行的时候也不会 SSL

上代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

var httpClientHandler = new HttpClientHandler

     {

         ServerCertificateCustomValidationCallback = (message, certificate2, arg3, arg4) => true

     };

     using (HttpClient client = new HttpClient(httpClientHandler))

     {

         string url = WeiXinSettings.GetJscode2Session(code);

 

         var result = await client.GetAsync(url);

 

         if (result.IsSuccessStatusCode)

         {

             string str = await result.Content.ReadAsStringAsync();

 

             return str;

         }

     }

 

解决办法2

  修改centos的环境变量 DOTNET_SYSTEM_NET_HTTP_USESOCKETSHTTPHANDLER=0

解决办法3

  

    通过在netcore. runtimeconfig.template.json配置文件中定义 System.Net.Http.UseSocketsHttpHandler 开关:

   

1

2

3

4

5

"runtimeOptions": {

  "configProperties": {

      "System.Net.Http.UseSocketsHttpHandler"false

  }

}

  此方法解决所有不需要证书访问的通讯 如果需要证书进行https访问 就不行了

 

解决方法 4 

  安装 OpenSSL

 

1.下载 OpenSSL:

wget https://www.openssl.org/source/openssl-1.0.2l.tar.gz
2.解压 OpenSSL:

tar -xzvf openssl-1.0.2l.tar.gz
3.进入 OpenSSL目录:

cd openssl-1.0.2l
4.配置并编译 OpenSSL:

./config --shared
make && make install
5.下载 curl 库:

wget https://curl.haxx.se/download/curl-7.55.1.tar.gz
6.解压 curl 库:

tar -xzvf curl-7.55.1.tar.gz
7.进入 curl 目录:

cd curl-7.55.1
8.设置动态库路径:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ssl/lib
9.配置并编译 curl:

./configure --prefix=/usr/local/curl/ --without-nss --with-ssl=/usr/local/ssl/
make && make install
10.备份默认的 curl 二进制文件

mv /usr/bin/curl /usr/bin/curl.bak
11.做一个新的 curl 软链

ln -s /usr/local/curl/bin/curl /usr/bin/curl
总体的替换到此就完成,可以执行 curl --version 来进行确认。下边是我执行的结果:

curl 7.55.1 (x86_64-pc-linux-gnu) libcurl/7.55.1 OpenSSL/1.0.2l
Release-Date: 2017-08-14
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile NTLM NTLM_WB SSL TLS-SRP UnixSockets HTTPS-proxy

 

1、查看 OPENSSLDIR 路径

$ openssl version -a

2、然后把 CentOS 默认的 openssl CA证书拷贝过来。

$ cp /etc/pki/tls/cert.pem /usr/local/openssl/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在本地测试 .NET Core SSL Socket 连接,你可以使用自签名证书来进行测试。以下是一些步骤: 1. 生成自签名证书 可以使用 OpenSSL 工具生成自签名证书。在 Windows 上,你可以使用 Git Bash 或 Cygwin 中的 OpenSSL 工具。在 Linux 上,OpenSSL 工具通常已经包含在系统中。 以下是生成自签名证书的命令: ``` openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 ``` 这将生成一个有效期为 365 天的自签名证书,并将密钥和证书分别保存到 key.pem 和 cert.pem 文件中。 2. 使用自签名证书设置 .NET Core SSL Socket 下面是一个简单的 .NET Core SSL Socket 示例代码: ```csharp using System; using System.Net.Security; using System.Net.Sockets; using System.Security.Authentication; using System.Security.Cryptography.X509Certificates; using System.Text; class Program { static void Main(string[] args) { var certificate = new X509Certificate2("cert.pem"); var listener = new TcpListener(System.Net.IPAddress.Loopback, 12345); listener.Start(); while (true) { Console.WriteLine("Waiting for connection..."); using (var client = listener.AcceptTcpClient()) using (var stream = client.GetStream()) using (var ssl = new SslStream(stream)) { ssl.AuthenticateAsServer(certificate, false, SslProtocols.Tls, true); Console.WriteLine("Client connected."); var buffer = new byte[4096]; var bytesRead = ssl.Read(buffer, 0, buffer.Length); Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, bytesRead)); var response = Encoding.UTF8.GetBytes("Hello, world!"); ssl.Write(response, 0, response.Length); } } } } ``` 在此示例中,我们使用 `TcpListener` 监听本地回环地址的 12345 端口,并使用 `X509Certificate2` 类加载自签名证书。然后,我们在一个无限循环中等待客户端连接,并在连接成功时使用 `SslStream` 对象进行身份验证和加密通信。 你可以使用任何支持 SSL/TLS 的客户端来测试这个示例代码。比如,你可以使用 OpenSSL 命令行工具: ``` openssl s_client -connect localhost:12345 -quiet ``` 这会连接到本地回环地址的 12345 端口,并尝试与 SSL/TLS 进行握手。如果一切正常,你将看到 "Hello, world!" 的响应。 注意:在生产环境中,你应该使用由受信任的证书颁发机构颁发的证书,而不是自签名证书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值