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

3
我正在尝试使用RestSharp在我的本地机器上测试API调用,下面是代码:

...

        var client = new RestClient("https://[API URL]");

        var request = new RestRequest( Method.POST);
        request.AddParameter("session", this, ParameterType.RequestBody);

        IRestResponse<SessionOut> response = client.Execute<SessionOut>(request);
        return response.Data.session.id;

响应中,我收到了一个错误提示,告诉我请求被中止,因为它“无法创建SSL/TLS安全通道”。
这是否意味着我需要尝试设置https://localhost而不是http://localhost来调用https地址的API? 更新 根据@Shai_Aharoni的答案,我已将我的代码更新如下。然而,我仍然遇到相同的错误。
        string pathToYourClientCert = Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "[my certificate file");
        var client = new RestClient("[API URL]/");
        client.ClientCertificates = new X509CertificateCollection();
        client.ClientCertificates.Add(new X509Certificate(pathToYourClientCert));

        var request = new RestRequest( Method.POST);
        request.AddParameter("session", this, ParameterType.RequestBody);

        IRestResponse<SessionOut> response2 = client.Execute<SessionOut>(request);

你的系统有某种代理吗?https://dev59.com/V6bja4cB1Zd3GeqPn-6I#47675172 - undefined
不,@AnirudhaGupta,只是从本地主机直接测试API。 - undefined
请查看@Shai的答案,如果它不起作用,你可以在Postman和HttpClient中进行测试。如果结果相同,那么你需要在你的机器上安装该证书。那个答案应该有效。 - undefined
3个回答

7

如果你找不到SecurityProtocolType.Tls12,只有SecurityProtocolType.Tls的话,考虑升级从.Net 4.0到4.5。或者直接使用https://dev59.com/0VYN5IYBdhLWcg3wi4ro - undefined

1

好的... 在您调用 HTTPS 端点之前,您需要完成几个步骤。

1) 确保您的服务器支持 HTTPS 端点(即:URL https://[APIURL] 可访问)。

2) 在执行 HTTPS 调用的机器上安装有效的服务器(API 服务器)证书。

3) 将证书添加到您的 RestSharp 客户端。类似于以下内容:

string pathToYourClientCert = "cer/cert.cer";
client.ClientCertificates.Add(new X509Certificate(pathToYourClientCert));

希望这有所帮助...

谢谢@Shai_Aharoni,我已经添加了证书加载代码,但仍然收到相同的错误。该证书是在IIS中创建并使用mmc.exe导出的。该网站在https://上运行(因为自行创建的证书而带有警告)。 请查看我的更新答案。 - undefined

1

按照以下步骤操作: https://learn.microsoft.com/en-us/xamarin/android/app-fundamentals/http-stack?tabs=macos

在 MainActivity.cs 中 OnCreate 加载应用程序之前,还需将以下代码添加到您的代码中:

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

我必须这样做,才能让我的Xamarin Forms API请求工作!

确保你的证书不是自签名的!!!


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