C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)

 1         public static string HttpPost(string url, string param = null)
 2         {
 3             HttpWebRequest request;
 4
 5             //如果是发送HTTPS请求
 6             if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
 7             {
 8                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;   //协议按需选择,
 9                 ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
10                 request = WebRequest.Create(url) as HttpWebRequest;
11                 request.ProtocolVersion = HttpVersion.Version10;
12
13             }
14             else
15             {
16                 request = WebRequest.Create(url) as HttpWebRequest;
17             }
18
19             request.Method = "POST";
20             request.ContentType = "application/json";
21             request.Accept = "*/*";
22             request.Timeout = 15000;
23             request.AllowAutoRedirect = false;
24             //查找我们导入的证书
25             X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
26             certStore.Open(OpenFlags.ReadOnly);
27             var aa = certStore.Certificates;
28             X509Certificate2Collection certCollection = certStore.Certificates.Find(X509FindType.FindBySubjectName, "www.xxx.com", false);
29             request.ClientCertificates.Add(certCollection[0]);
30
31
32             StreamWriter requestStream = null;
33             WebResponse response = null;
34             string responseStr = null;
35
36             try
37             {
38                 requestStream = new StreamWriter(request.GetRequestStream());
39                 requestStream.Write(param);
40                 requestStream.Close();
41
42                 response = request.GetResponse();
43                 if (response != null)
44                 {
45                     StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
46                     responseStr = reader.ReadToEnd();
47                     reader.Close();
48                 }
49             }
50             catch (Exception)
51             {
52                 throw;
53             }
54             finally
55             {
56                 request = null;
57                 requestStream = null;
58                 response = null;
59             }
60
61             return responseStr;
62         }
63
64
65         private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
66         {
67             return true; //总是接受
68         } 

第一步导入证书:

a、运行输入“mmc”

b、在控制台中点击“文件”——>“添加/删除管理单元”,在弹出框中依次选择“证书”-“添加”-“”-“确定”

上图点击“添加”弹出框选择“计算机账户”,一直下一步到完成。

c、证书导入,“证书”右键 选择“所有任务”,点击“导入“。

d、证书授权

1、工具下载 安装winhttpcertcfg.msi 下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=19801。

2、到winhttpcertcfg安装目录运行如下命令提升账户访问权限:WinHttpCertCfg.exe -g -c LOCAL_MACHINE\MY -s "证书名" -a  "NETWORK SERVICE"。

说明:-s  证书名(如:www.xxxx.com) ;-a 授权用户

3、如果你的IIS是7.0,需要设置网站应用池标识(如图)。

4、重启IIS

原文地址:https://www.cnblogs.com/president/p/11593427.html

时间: 2024-10-10 00:26:20

C# https证书通信Post/Get(解决做ssl通道时遇到“请求被中止: 未能创建 SSL/TLS 安全通道”问题)的相关文章

"请求被中止: 未能创建 SSL/TLS 安全通道"解决办法

1.安装证书: 手动双击证书安装,过程略 2.分配权限: 在控制台中找到安装的证书,右键选择“管理私钥”, 添加自己需要的权限,如果在测试可以直接添加Everyone 3.修改代码:public static string Refund(string urlWithParams) { ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.T

IIS7下 【请求被中止: 未能创建 SSL/TLS 安全通道 】 解决方法

    一.导入证书 1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 .         2. 在 文件 菜单上单击 添加/删除管理单元 .         3. 在 可用的管理单元 列表中选择 证书 ,点击 添加 .         4. 在 证书管理 对话框中选择 计算机账户 ,然后单击 下一步         5. 在 选择计算机 对话框中,单击 完成 .         6. 在 添加或删除管理单元 对话框单击 确定 .         7. 展开 证书 (本地计算机)

C# 访问https 未能创建 SSL/TLS 安全通道

C# 访问https请求被中止: 未能创建 SSL/TLS 安全通道(Could not create SSL/TLS secure channel) 一般GetResponse可以直接访问https,如果不行添加回调: ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult

【SSL】WebClient 请求 https 页面出错:未能创建 SSL/TLS 安全通道

#问题: 当向一个https的url上发送请求,报错:未能创建 SSL/TLS 安全通道: using (WebClient client = new WebClient()) { string address="https://xxx.com"; client.Headers.Add(HttpRequestHeader.ContentType, "text/xml"); System.Text.ASCIIEncoding encoding=new System.T

解决“未能创建 SSL/TLS 安全通道”异常

引用: https://www.cnblogs.com/ahdung/p/10489229.html 之前写了一个桌面程序,程序会间歇性访问某个https接口,一直用的好好的,今天突然报错了,异常就发生在访问接口的地方,曰“请求被中止,未能创建 SSL/TLS 安全通道.”,另外有台电脑也有跑该程序,也是同样的报错,看来是接口方改动过什么了. 搜索一番,原因应该是,接口方变更了安全协议,而客户端并未启用该协议.解决办法自然就是:让客户端启用该协议.具体就是在发起网络请求之前确保ServicePo

HTTPS加密通信原理及数字证书系统

https加密通信原理: 公钥私钥成对,公钥公之于众,私钥只有自己知道. 用公钥加密的信息只能由与之相对应的私钥解密. 甲给乙发送数据时,甲先用乙的公钥加密这段数据,再用自己的私钥对这段数据的特征数据(数字指纹,通过HASH函数生成)进行RSA运算形成签名.乙接到数据后,先用自己的私钥解密数据,并用甲的公钥对甲的签名进行验证(解出数字指纹,与接收到的数据的数字指纹做对比).如此,可保证发信人无法抵赖曾发过该信息,也确保报文在传递过程中不会被篡改. CA证书: CA证书是指CA颁发给用户的证书,其

网站提示https证书风险是什么原因?怎么解决?

有时候使用电脑浏览器遇到网站安全https证书风险的时候,浏览器提示证书风险怎么办呢?下面来教大家几个方法: 可以通过证书风险拦截提示页面上的"忽略警告,继续访问"继续点击访问此网站,但是不建议用户这么做.如果你在https证书风险提示页面点击"忽略警告"并转到含有证书风险的网站,电脑浏览器将会暂时记住该https证书错误的忽略,你后续再访问该网站不会再出现证书风险提示的阻止页面(注意:清理缓存等操作会忘记该忽略).但地址栏"安全状态"栏中的ht

https证书申请流程和简介

HTTPS证书是什么 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输.https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(

Let's Encrypt,免费好用的 HTTPS 证书

#参考https://imququ.com/post/letsencrypt-certificate.html#####argparse安装#http://www.cnblogs.com/emanlee/p/4577249.html 很早之前我就在关注 Let's Encrypt 这个免费.自动化.开放的证书签发服务.它由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,而 ISRG 是来自于美国加利福尼亚州的一个公益组织.Let's E