The request was aborted: Could not create SSL/TLS secure channel 解决办法

在本地运行,什么事都没有,发布到服务器上死活就是请求不成功。报错“The request was aborted: Could not create SSL/TLS secure channel”。其实最开始的异常是WebException 详细信息是“UnknowError”。这就比较尴尬了,最开始怀疑是网络问题,后来发现应该不是,还是得找原因。于是,各种加日志,终于暴露了这个错误。

我这是webclient进行请求的,因为对方是银行的系统,所以各种证书加密很完善,还有一个PFX的网络证书。于是找到一个覆盖webclient的解决方案:

public class MyWebClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
            // 本地环境证书配置
            //Common.Common.WriteLogs("证书地址为:" + System.AppDomain.CurrentDomain.BaseDirectory + "证书地址和名称.pfx");
            //X509Certificate certificate = new X509Certificate(System.AppDomain.CurrentDomain.BaseDirectory + "证书地址和名称.pfx", "密码");
            try
            {
                X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                if (store != null)
                {
                    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                    try
                    {
                        Common.Common.WriteLogs("准备加载证书");
                        X509Certificate2 certificate = store.Certificates.Find(X509FindType.FindBySerialNumber, "证书序列数", false)[0];
                        Common.Common.WriteLogs("加载证书完成");

                        if (certificate != null)
                        {
                            Common.Common.WriteLogs("X509Certificate2不为空");
                            request.ClientCertificates.Add(certificate);
                            Common.Common.WriteLogs("添加到request");
                            return request;
                        }
                        else
                        {
                            throw new Exception("X509Certificate2加载失败");
                        }
                    }
                    catch (Exception ex)
                    {
                        Common.Common.WriteLogs("加载证书失败,错误为:" + ex.Message);
                        throw ex;
                    }
                }
                else
                {
                    throw new Exception("X509Store加载失败");
                }
                
            }
            catch
            {
                throw;
            }
        }
    }

 

本地加载证书的时候是用的这句

X509Certificate certificate = new X509Certificate(System.AppDomain.CurrentDomain.BaseDirectory + "证书地址和名称.pfx", "密码");

但是服务器上始终报错“The request was aborted: Could not create SSL/TLS secure channel”,这看着应该是加载证书错误了。后来网上找到解决办法,这种PFX证书在IIS上需要导入然后使用的。

于是用如下方法添加:

Windows xp/2003
        1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。
        2. 在 文件 菜单上单击 添加/删除管理单元 。
        3. 在 添加/删除管理单元 对话框中,单击 添加 。
        4. 在 添加独立管理单元 对话框单击 证书 ,然后单击 添加 。
        5. 在在 证书管理单元中 对话框中单击 计算机帐户 ,然后单击 下一步
        6. 在 选择计算机 对话框中,单击 完成 。
        7. 在 添加独立管理单元 对话框单击 关闭 ,然后单击 确定 。
        8. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。
        9. 右键 -》 所有任务-》导入 选择你的证书导入
    Windows 7
        1. 单击 开始 ,单击 运行 ,键入 mmc ,然后单击 确定 。
        2. 在 文件 菜单上单击 添加/删除管理单元 。
        3. 在 可用的管理单元 列表中选择 证书 ,点击 添加 。
        4. 在 证书管理 对话框中选择 计算机账户 ,然后单击 下一步
        5. 在 选择计算机 对话框中,单击 完成 。
        6. 在 添加或删除管理单元 对话框单击 确定 。
        7. 展开 证书 (本地计算机) ,展开 个人 ,然后单击 证书 。
        8. 右键 -》 所有任务-》导入 选择你的证书导入
————————————————
版权声明:本文为CSDN博主「redmapleleaf25」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/redmapleleaf25/article/details/49530381

 

但是加完证书改完代码后还是不行,留意到一下这句

这里要注意的是授权账户,IIS6下面一般用的是NetworkService,如果你用的IIS7,必须要保证你网站所用的 应用程序池的 "标识"和要授权的账户一致。其它版本不用设置

于是设置应用程序池中的标识。最终成功。

 

有可能加载证书的账户和我代码中不一样,可以挨个试试。

 

这问题搞了两天,实在心力交瘁。赶紧记录下来,供自己缅怀吧。

 

感谢redmapleleaf25的博客内容。本文涉及的文章地址为:

https://blog.csdn.net/redmapleleaf25/article/details/49530381

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值