RestRequest 在本地可以工作但在 Azure 上却不行,“请求被中止:无法创建 SSL/TLS 安全通道。”

8
当我在本地主机上运行应用程序时,它能够正常工作,但是当我将其发布到Azure后,我的请求就停止工作了。出现错误:“请求被中止:无法创建SSL/TLS安全信道。”
我有一个调用外部商业Soap-API的应用程序。外部API要求在进行请求时传递客户端证书,并需要将我的IP地址列入白名单。
商业API已经将我从我的应用服务/属性/出站和虚拟IP地址中获得的IP地址列入白名单。 enter image description here 我已经将客户端证书文件(.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安全通道。”

enter image description here

在搜索stackoverflow寻找答案后,我不得不在我的方法顶部添加以下代码行:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
        ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, errors) => true;

但我仍然收到相同的错误响应。

我需要在Azure中设置任何设置或以某种方式安装我的客户端证书在Azure上吗?

在评论后添加附加信息: 在此输入图片描述


你有收到内部异常吗?那里应该会有更多关于问题的信息。 - StavSheiz
@StavSheiz 我已经编辑了我的问题。这是你要找的吗? - Carl Decks
是的,但似乎内部异常为空。您使用的是哪个版本的 .net? - StavSheiz
根据文档,如果这是有价值的信息,则API使用双向SSL。 - Carl Decks
你在本地和Azure中使用了同一个客户端证书吗?你可能需要在机器上安装该证书。 https://www.ssl.com/how-to/install-a-ssl-certificate-on-a-microsoft-azure-web-appwebsite-and-cloud-service/ - ofir elarat
显示剩余2条评论
2个回答

7
我需要将我的.p12证书文件转换成crt文件,然后将其导入到Azure中,并在我的代码中使用X509Store来获取它。此后握手过程成功完成。

0

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

我一开始使用自托管代理,但当我改用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

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


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