Azure api 请求被中止:无法创建 SSL/TLS 安全通道。 http客户端在调用一些web api时

Posted

技术标签:

【中文标题】Azure api 请求被中止:无法创建 SSL/TLS 安全通道。 http客户端在调用一些web api时【英文标题】:Azure api The request was aborted: Could not create SSL/TLS secure channel. http client While calling some web api 【发布时间】:2016-05-19 13:30:17 【问题描述】:

以下代码在 localhost 上运行良好,但在 microsoft azure 上部署我的 api 后出现上述错误。

我的代码如下:

public class UsersController : Controller   

    private readonly HttpClient _client;

    public UsersController()
    
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
        _client = new HttpClient  BaseAddress = new Uri("https://pincode.saratchandra.in/api") ;
        _client.DefaultRequestHeaders.Accept.Clear();
        _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    

public JsonResult GetAddress(int pincode)

    var response     =_client.GetAsync("/pincode/125112").Result;

    //Here it throws an exception: got no response
    if (response.IsSuccessStatusCode)
    
    

    return Json(ApiResult.Success(), JsonRequestBehavior.AllowGet);

上面的调用没有得到任何响应,只是得到错误

请求中止:无法创建 SSL/TLS 安全通道

【问题讨论】:

您找到解决方法了吗?遇到同样的问题。 不,我找不到解决办法。 您的 API 使用的是 Azure 应用服务还是 Azure 云服务? 【参考方案1】:

我们最近遇到了一些与 API 类似的问题。

在我们的例子中,这些问题是通过将安全协议类型更改为 TLS 1.2 来解决的,如下所示:

  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这似乎是 SSL 被弃用以及 PCI 建议在 2016 年中期采用 TLS 1.2 的结果。请参阅here 了解更多信息

编辑:

这对我有用:

 class Program
    
        private static HttpClient _client;
        static void Main(string[] args)
        
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            _client = new HttpClient ();
            _client.DefaultRequestHeaders.Accept.Clear();
            _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var response = _client.GetAsync("https://pincode.saratchandra.in/api/pincode/125112").Result;
        
    

【讨论】:

我已经尝试了 SecurityProtocol 的所有选项,没有一个对我不起作用 -;) 对我来说,这在本地服务器和 Windows 服务器上也可以正常工作,但在 azure 上它不起作用 你并不孤单。有一个很长的线程social.msdn.microsoft.com/Forums/azure/en-US/…,但没有解决方案【参考方案2】:

我们今天一直在解决同样的问题,你需要做的就是增加.NET的运行时版本

4.5.2 无法解决上述问题,而 4.6.1 还可以

<httpRuntime targetFramework="4.6.1"/>

如果需要保留.NET版本,则设置

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

【讨论】:

以上是关于Azure api 请求被中止:无法创建 SSL/TLS 安全通道。 http客户端在调用一些web api时的主要内容,如果未能解决你的问题,请参考以下文章

“请求被中止:无法创建 SSL/TLS 安全通道”第一次访问 API 时

Api 随机调用失败 - 请求被中止:无法创建 SSL/TLS 安全通道

RestRequest 在本地工作,但不是来自天蓝色“请求被中止:无法创建 SSL/TLS 安全通道。”

发出请求时出错:请求被中止:无法创建 SSL/TLS 安全通道

无法发送 HTTP 请求,因为请求被中止。 “无法创建 SSL/TLS 安全通道”

请求中止无法创建 SSL/TLS 安全通道 - HttpWebRequest