Ssl 贝宝快捷结账连接。客户端和服务器无法通信,因为它们没有通用的算法

Ssl 贝宝快捷结账连接。客户端和服务器无法通信,因为它们没有通用的算法,ssl,encryption,paypal,paypal-sandbox,tls1.2,Ssl,Encryption,Paypal,Paypal Sandbox,Tls1.2,我正在将PayPal结算集成到我们当前的电子商务网站。在我的本地计算机上,一切正常,但在临时环境中,连接抛出以下错误: System.Net.WebException:基础连接已关闭:接收时发生意外错误。-->System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们没有通用算法 正如PayPal文档所述,我们支持SHA-256,并在服务器上安装了G5根证书() 该服务器在Windows server 2008 R2上运行,支持的密码为Triple

我正在将PayPal结算集成到我们当前的电子商务网站。在我的本地计算机上,一切正常,但在临时环境中,连接抛出以下错误:

System.Net.WebException:基础连接已关闭:接收时发生意外错误。-->System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们没有通用算法

正如PayPal文档所述,我们支持SHA-256,并在服务器上安装了G5根证书()

该服务器在Windows server 2008 R2上运行,支持的密码为Triple DES 168、AES 128/128和AES 256/256。 如果Tls12未硬编码(见下文),则会引发另一个错误:“无法创建SSL/TLS安全通道”

如果有人能在这方面提供帮助,我将不胜感激。 谢谢


最后我们弄清楚了发生了什么。 在Windows 2008R2中,客户端连接的注册表中默认禁用TLS 1.1和1.2。因此,虽然服务器本身可以接受传入请求的两个协议,但必须通过注册表启用传出客户端连接

必须在协议->TLS 1.1(和TLS 1.2)->DisabledByDefault下进行更改

因此,需要更改这些值,重新启动,TLS1.1和TLS1.2应该可以工作

    public string SendRequest(string url, string postData) {

        var uri = new Uri(url);

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        var request = WebRequest.Create(uri);

        var encoding = new UTF8Encoding();
        var requestData = encoding.GetBytes(postData);

        request.ContentType = "application/x-www-form-urlencoded";
        request.Method = "POST";
        request.Timeout = (300*1000); //TODO: Move timeout to config
        request.ContentLength = requestData.Length;

        using (var stream = request.GetRequestStream()) {
            stream.Write(requestData, 0, requestData.Length);
        }

        var response = request.GetResponse();

        string result;

        using (var reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII)) {
            result = reader.ReadToEnd();
        }

        return result;
    }