Проблема с выполнением сертификата http клиентского вызова: «Запрос отменен: невозможно создать безопасную связь TLS / SSL» - PullRequest
0 голосов
/ 28 октября 2018

Объясняю ситуацию более четко: у меня есть служба wcf, которая содержит внутреннего менеджера, который выполняет вызовы остальных служб.Для выполнения этих вызовов внешней службе требуется сертификат (считается, что используемый сертификат действителен).Проблема заключается в том, что когда я пытаюсь вызвать http-вызов клиента для этой службы, возникает исключение: «Запрос отменен: невозможно создать безопасную связь TLS / SSL».Я пробовал разные решения, но я не смог решить проблему, и я надеюсь, что кто-то может мне помочь.Ниже приведен код внутреннего менеджера, который делает вызов.

try
        {
            WebRequestHandler handler = new WebRequestHandler();

            handler.ClientCertificates.Add(getCertificate());

            HttpClient client = new HttpClient(handler);

            ServicePointManager.Expect100Continue = true;

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            ServicePointManager.ServerCertificateValidationCallback +=

                (sender, cert, chain, sslPolicyErrors) => { return true; };

            client.DefaultRequestHeaders.Accept.Clear();

            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var input = new 
            {
                id = 90,

                version = Convert.ToInt32(Version),

                network = Convert.ToInt32(Id),

                list = List
            };

            var response = await client.PostAsJsonAsync(_endpoint, input);

            if (response.StatusCode != HttpStatusCode.OK)
            {

                throw new Exception($"Error code: {response.StatusCode}");

            }

            var returnedData = await response.Content.ReadAsStringAsync();
        }
        catch (Exception ex)
        {
            throw new Exception($"{ex.Message}\n{ex.StackTrace}");
        }

Примечание: учтите, что метод getCertificate возвращает правильный сертификат

...