繁体   English   中英

TLS 1.1和1.2的连接问题-Azure Web应用

[英]Connection issue with TLS 1.1 and 1.2 - Azure web app

在我的应用程序中,我正在从另一个WebAPI方法(理想情况下是内部服务调用)中调用用WebAPI编写并托管在PaaS环境中的API,该方法是蓝色的,例如,WebApp_A中的MethodA调用WebApp_B中的MethodB。 但是,如果WebApp_B的TLS设置为1.1或1.2(它与1.0兼容),我会遇到上述错误。 “无法从传输连接读取数据:远程主机强行关闭了现有连接。”

我有类似的WebApp(WebApp_C),它没有TLS错误。 下面是我们用来从WebApp_A调用WebApp_B中的MethodB的代码

 public async Task<ServiceResponse> CreateDialog(RequestObject requestObject)
 {
        ServiceResponse serviceResponse = new ServiceResponse();
        try
        {
            using (var client = new HttpClient())
            {

                SessionTokenBo jwtData = new SessionTokenBo();
                Logger = _logger;
                jwtData = GetInternalToken(InternalCallTypes.Utilities.ToString(), int.Parse(ServiceConfiguration.TokenExpiryWindow), int.Parse(ServiceConfiguration.InternalTokenExpiryWindow));
                if (null != jwtData)
                {
                    client.BaseAddress = new Uri("URI");
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwtData.Token);                        HttpResponseMessage response = await client.PostAsJsonAsync("service/methodB", requestObject);                        
                    if (response.IsSuccessStatusCode)
                    {
                        var data = response.Content.ReadAsStringAsync().Result;
                        serviceResponse = JsonConvert.DeserializeObject<ServiceResponse>(data);
                    }
                }
            }
        }
        catch (Exception ex)
        {
           throw
        }
        return serviceResponse;
  }

如果我这样给出安全协议,它将起作用

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

我也尝试从邮递员的请求,它没有失败。 所以现在很困惑,因为如果邮递员工作,那么理想情况下不是WebApp设置问题

TLS 1.0不再是默认值。 在发出请求之前添加以下行:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

请参考此问题

更新:

但是我的疑问是,为什么其他Web应用程序不能使用相同的代码?

发现了问题,这是由于webconfig中的目标框架是4.5.2。

<compilation targetFramework="4.7.2"></compilation> 
<httpRuntime targetFramework="4.7.2" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM