两种方式彻底解决请求被中止: 未能创建 SSL/TLS 安全通道
Posted 擀掉上帝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两种方式彻底解决请求被中止: 未能创建 SSL/TLS 安全通道相关的知识,希望对你有一定的参考价值。
对接电子发票的时候需要使用证书和SSL,本地VS直接调试可以成功,但是放到服务器上出现了“请求被中止: 未能创建 SSL/TLS 安全通道”的错误,经过二百根头发的付出后成功解决,方法如下:
一:升级 .NET Framework版本4.6及以上
升级 .NET Framework版本4.6及以上成功解决,我本地开发用的win10,所以没有报错,但是服务器是Server2008。
二:给证书授权
1、运行mmc–>文件–>添加/删除管理单元–>证书–>计算机账户–>完成–>确定。
2、证书–>右键个人–>所有任务–>导入–>选择需要使用的证书–>下一步到完成。
3、下载winhttpcertcfg.exe 这个工具,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=19801。
4、安装后一般是在C:\\Program Files\\Windows Resource Kits\\Tools这个路径下面。
进入cmd 执行如下命令:winhttpcertcfg -g -c LOCAL_MACHINE\\MY -s “test” -a “NetworkService”
这里解释一下这几个参数的含义:
-g 是grant授权的意思,将该证书的使用权限授予某个用户
-c 是certstore证书存储区,指定 本地计算机/当前用户下的证书存储区位置,我们这里是MY,个人存储区
-s 是subjectstr 用于模糊匹配证书的一个字符串,我们这里用证书文件名 test
-a 是account要授权的用户帐号
这里要注意的是授权账户,IIS6下面一般用的是NetworkService,如果你用的IIS7,必须要保证你网站所用的应用程序池的 “标识”和要授权的账户一致。
执行成功之后,会列出模糊匹配出的证书列表和已经授权的账户。
5、如果授权出现Error: Unable to find or obtain a context for requested certificate请确定导入证书的时候使用的是计算机账户而不是我的用户账户!
(40)C#里使用WebRequest和出错:请求被中止: 未能创建 SSL/TLS 安全通道
如果不想使用异步的连接,可能会使用WebRequest来请求网络数据,但是它经常会弹出下面的错误:
请求被中止: 未能创建 SSL/TLS 安全通道
一开始不知道怎么样去解决这个问题,后来仔细地查看是没有建立SSL安全通道,所以需要添加下面这行代码:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
为了访问Web API,可以通过下面的代码演示怎么样使用WebRequest。
这个例子先使用一个简单的代码来访问微软的网站,接着返回数据显示出来,最后封装了两个函数,一个函数是通过POST发送数据,一个函数是通过GET发送数据。
整个例子的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
namespace Examples.System.Net
public class WebReq
以上是关于两种方式彻底解决请求被中止: 未能创建 SSL/TLS 安全通道的主要内容,如果未能解决你的问题,请参考以下文章
"请求被中止: 未能创建 SSL/TLS 安全通道"解决办法
(40)C#里使用WebRequest和出错:请求被中止: 未能创建 SSL/TLS 安全通道
(40)C#里使用WebRequest和出错:请求被中止: 未能创建 SSL/TLS 安全通道
C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)