繁体   English   中英

HTTP Get方法的SSL握手异常-ASP.NET Core 2.1

[英]SSL Handshake exception for HTTP Get method - ASP.NET core 2.1

我正在尝试使用asp.net core 2.1调用rest方法,但是即使我在此调用中使用了http,也一直在获取ssl异常。 我使用的代码是:

public async Task<bool> SyncTickets()
    {
        try
        {
            HttpClient client = new HttpClient();
            var path = "http://testdesk.vmw.be:8082/helpdesk/WebObjects/Helpdesk.woa/ra/PriorityTypes?username=admin&apiKey=bJZw2jP8wgtyGXI736K6DfUiEjJYTLuqC8fGuOBN";
            Ticket ticket = new Ticket();
            HttpResponseMessage response = await client.GetAsync(path);
            if (response.IsSuccessStatusCode)
            {
                var responseMsg = await response.Content.ReadAsAsync<Object>();
                return true;
            }
            return false; 

        }
        catch (Exception e)
        {
            Console.WriteLine(e.ToString());
            return false;
        }

例外是:

{System.Net.Http.HttpRequestException:无法建立SSL连接,请参阅内部异常。 ---> System.IO.IOException:握手由于意外的数据包格式而失败

GetAsync方法上发生异常。 当我使用相同的路径测试低谷邮递员或浏览器时,它工作得很好,我得到了响应。

知道我在这里缺少什么吗?

也许您的服务器仍然需要加密并重定向到https?

如果是这样,并且https仍在创建HttpClient之前添加报告:

ServicePointManager.ServerCertificateValidationCallback +=
(sender, cert, chain, sslPolicyErrors) => true;

这将接受所有证书。 此设置是您的应用程序的全局设置。 请勿在生产中使用它。 如果您的服务器使用自签名证书或内部CA颁发的证书,请仅将其用于测试。 在生产中添加对内部CA的适当验证,或仅接受特定的自签名证书 浏览器可能通过域控制器或通过组策略在PC上添加了内部证书或CA,因此它们不会报告它们不受信任。

另外,对于https,您可以显式使用TLS协议。 在创建HttpClient之前添加以下行,然后重试:

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

如果在服务器上定义了协议集,则可以缩小协议列表范围以仅启用实际支持的协议。

暂无
暂无

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

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