Azure API:请求被中止:无法创建SSL/TLS安全通道。HTTP客户端调用某些Web API。

7

以下代码在本地主机上运行正常,但在将我的API部署到Microsoft Azure后出现了上述错误。

我的代码如下:

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 安全通道


你找到解决方法了吗?我也遇到了同样的问题。 - Dr Schizo
没有,我找不到解决方法。 - jitender
你是在使用Azure App Services还是Azure Cloud Services来搭建你的API? - Larry Dukek
3个回答

2

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

在我们的情况下,这些问题通过将安全协议类型更改为TLS 1.2来解决,方法如下:

  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

这似乎是SSL被废弃,PCI自2016年中期开始推荐采用TLS 1.2的结果。更多信息请参见此处
编辑:
这对我有效:
 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;
        }
    }

我已经尝试过所有的安全协议选项,但它们都对我无效。-;) - jitender
对我来说,在本地服务器和Windows服务器上都可以正常工作,但在Azure上却无法工作。 - jitender
你并不孤单。这里有一个漫长的帖子 https://social.msdn.microsoft.com/Forums/azure/en-US/ca6372be-3169-4fb5-870f-bfbea605faf6/azure-webapp-webjob-exception-could-not-create-ssltls-secure-channel?forum=windowsazurewebsitespreview,但是没有解决方案。 - Matt Evans

0

我在新的函数应用程序部署中遇到了问题,我一直收到相同的错误信息 -

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

我使用的是自托管代理,但当我使用 Microsoft 托管代理 进行部署时,它可以正常工作。问题是由于缺少 TLS 1.2 设置和配置强密码学而引起的。我不得不在注册表中添加以下密钥,并在之后重新启动机器。

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions" = dword:00000001
"SchUseStrongCrypto" = dword:00000001

之后它就像魔法一样运行了。参考资料


0
我们今天也解决了同样的问题,你所需要做的就是升级 .NET 的运行时版本。
对于以上问题,4.5.2 版本不起作用,而 4.6.1 则能够正常工作。
<httpRuntime targetFramework="4.6.1"/>

如果您需要保留.NET版本,则设置:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接