Подключение к PayPal Express Checkout. Клиент и сервер не могут общаться, потому что у них нет общего алгоритма.

Я интегрирую кассу PayPal в наш текущий сайт электронной коммерции. На моем локальном компьютере все работает, как ожидалось, но в промежуточной среде соединение выдает следующую ошибку:

System.Net.WebException: базовое соединение было закрыто: при получении произошла непредвиденная ошибка. ---> System.ComponentModel.Win32Exception: Клиент и сервер не могут взаимодействовать, поскольку у них нет общего алгоритма

Поскольку в документации PayPal указано, что это необходимо, мы поддерживаем SHA-256, и на сервере установлен корневой сертификат G5 (https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1766&viewlocale=en_US&direct=en).

Сервер работает под управлением Windows Server 2008 R2, а поддерживаемые шифры - Triple DES 168, AES 128/128 и AES 256/256. Если Tls12 не запрограммирован жестко (см. Ниже), он выдает другую ошибку: «Не удалось создать безопасный канал SSL / TLS».

Буду признателен, если кто-нибудь сможет помочь в этом. Спасибо!

    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;
    }

person sebkeys    schedule 11.04.2016    source источник


Ответы (1)


В конце концов мы разобрались, что происходит. В Windows 2008R2 протоколы TLS 1.1 и 1.2 по умолчанию отключены в реестре для клиентских подключений. Таким образом, хотя сам сервер может принимать два протокола для входящих запросов, исходящие клиентские соединения должны быть разрешены через реестр.

Изменение должно быть выполнено в разделе Протоколы -> TLS 1.1 (и TLS 1.2) -> DisabledByDefault.

Итак, речь шла об изменении этих значений, перезагрузке, и TLS 1.1 и TLS 1.2 должны работать.

person sebkeys    schedule 13.04.2016