RestRequest 在本地工作,但不是来自天蓝色“请求被中止:无法创建 SSL/TLS 安全通道。”
Posted
技术标签:
【中文标题】RestRequest 在本地工作,但不是来自天蓝色“请求被中止:无法创建 SSL/TLS 安全通道。”【英文标题】:RestRequest works local but not from azure "The request was aborted: Could not create SSL/TLS secure channel." 【发布时间】:2021-04-30 02:48:14 【问题描述】:当我在 localhost 中运行我的应用程序时,它工作正常,但是当我将它发布到 Azure 时,我的请求停止工作。 收到错误:“请求被中止:无法创建 SSL/TLS 安全通道。”
我有一个调用外部商业 Soap-API 的应用程序。外部 API 需要在我发出请求时传递客户端证书,并且还需要将我的 IP 地址列入白名单。
商业 API 已将我从 Azure 中的应用服务/属性/传出和虚拟 IP 地址获得的 IP 列入白名单
我已将我的客户端证书文件 (.p12) 添加到我的解决方案中的一个文件夹中,当检查上传到 azure 的文件时,我也可以在那里看到它。
使用 RestSharp,我的请求如下所示:
private string RequestToBv(string pXml)
X509Certificate2 cert = new X509Certificate2(bvCertificatePath, bvCertificatePassword);
var client = new RestClient(mXmlApiUrl); //mXmlApiUrl = url to endpoint
client.Timeout = -1;
client.ClientCertificates = new X509CertificateCollection() cert ;
var request = new RestRequest(Method.POST);
request.AddHeader("Content-Type", "application/xml");
request.AddParameter("application/xml", pXml, ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
if (response.StatusCode == HttpStatusCode.OK)
return response.Content;
return "";
在 Azure 中调试时,我得到 StatusCode = 0 和错误消息:“请求已中止:无法创建 SSL/TLS 安全通道。”
在 *** 中搜索答案后,我必须在我的方法顶部添加以下代码行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;
但我仍然得到相同的错误响应。
我是否需要在 Azure 中设置任何设置或在 Azure 上以某种方式安装我的客户端证书?
评论后的其他信息:
【问题讨论】:
你有内部异常吗?那里应该有更多关于问题的信息 @StavSheiz 我已经编辑了我的问题。这就是你要找的吗? 是的,但内部异常似乎为空。您使用的是哪个版本的 .net? .NET Framework 4.8.4300.0 根据文档,如果有任何有价值的信息,API 使用 2-way SSL 【参考方案1】:我要做的就是将我的 .p12 证书文件转换为 crt 文件,将其导入 Azure,然后在我的代码中使用 X509Store 来获取它。 之后握手成功
【讨论】:
以上是关于RestRequest 在本地工作,但不是来自天蓝色“请求被中止:无法创建 SSL/TLS 安全通道。”的主要内容,如果未能解决你的问题,请参考以下文章
Fastlane iOS 测试在本地通过,但不是来自 Jenkins
天蓝色中的 Web 应用程序 http 404 错误,但在本地运行