调用微信红包接口,本地可以服务器不可以。 请求被中止: 未能创建 SSL/TLS 安全通道

微信红包的地址接口地址是:

https://api.mch.weixin.qq.com/pay/micropay

当时造成这个不能用的原因是:我把服务器从windows server 2008升级到windows server2019

搞这个问题,搞了我好久,真他妈的是。

网上各种说的比如 在前面加一个 

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3
                                       | SecurityProtocolType.Tls
                                       | SecurityProtocolType.Tls11
                                       | SecurityProtocolType.Tls12;

或者什么
   ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;   //协议按需选择,不行就都试一遍
都没用。试了都没用。

然后那什么将证书导入到 个人 里面,然后给证书赋值权限,然后用最下面这个代码去找证书也没用

//X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
//certStore.Open(OpenFlags.ReadOnly);
//X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindByThumbprint, "证书指纹", false);
//request.ClientCertificates.Add(certCollection[0]);

根据一大通搜索,以上那么多方法无非就是指定 ssl 协议版本,这个需要看微信支持哪些协议版本

打开下面这个连接查一下微信那个红包接口一查,就知道对方  1.0  1.1  1.2 三个版本,所以只要指定任意一个,按道理就没错。

https://myssl.com/api.mch.weixin.qq.com?domain=api.mch.weixin.qq.com&port=443

 

 

 

 上次上线正常 运行的代码就是这么加载证书的,只要给他证书文件的路径和证书密码就可以,不需要导入到系统

X509Certificate2 cert = new X509Certificate2(WxPayConfig.SSLCERT_PATH, WxPayConfig.SSLCERT_PASSWORD);
request.ClientCertificates.Add(cert);

然后各种在群里提问,终于找到答案:IIS进程池里面有一个开关”加载用户配置文件“要改为true,如图:

 

 这真的是一个悲伤的故事,浪费了我一天半的时间,各种调代码上线测试。。。。。

不知道为什么我本地win10是新安装的系统,和服务器windows server2019也是新安装的系统,不知道为什么默认的IIS版本都是10.0,为什么服务器上进程池创建出来默认就是false而本地是IIS创建进程池以后竟然是true。

所以以后,大家碰到这个问题,不要乱各种百度。

一步步确认问题在哪里:

1、确认对方https协议支持的版本,上 https://myssl.com/ 输入它的域名地址就可以。

2、.net 写代码的时候,按它支持的协议指定版本就可以。

3、证书放到某个路径,证书密码确保正确。(可能还要把证书设置为everyone可读)

按上面3点保证,写出来的代码,如果还报 请求被中止: 未能创建 SSL/TLS 安全通道  ,如果你用的是IIS部署,就去检查进程池是否允许加载用户配置文件吧

 

posted @ 2020-08-20 14:48  LoveCoder  阅读(398)  评论(0编辑  收藏  举报