sanjaysgh Ответов: 1

Клиент и сервер не могут общаться, потому что они не могут обрабатывать общий алгоритм.


Я получаю эту ошибку при получении службы ответа. Я использую этот код ниже


private void GetAvailability(string propName, string propNum)
        {
            try
            {
                GetPropertyCodeSeapines db = new GetPropertyCodeSeapines();
                string soap = @"<?xml version=""1.0"" encoding=""utf-8""?>
                <soap12:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap12=""http://www.w3.org/2003/05/soap-envelope"">
                  <soap12:Header>
                    <soapheader xmlns=""http://www.800beachme.com/"">
                      <UserName>*********************</UserName>
                      <Password>*********************</Password>
                    </soapheader>
                  </soap12:Header>
                  <soap12:Body>
                    <SPR_HHVR_AvailabilityByPropertyID xmlns=""http://www.800beachme.com/"">
                      <HHVR_SPR_AVAILABLEDATA_RQ PropertyCode=""" + propNum + @""" PropertyName=""" + propName + @""" />
                    </SPR_HHVR_AvailabilityByPropertyID>
                  </soap12:Body>
                </soap12:Envelope>";

                
                HttpWebRequest req = (HttpWebRequest)WebRequest.Create("*****");
                req.ContentType = "application/soap+xml;";
                req.Method = "POST";
                req.Accept = "*/*";
                req.UserAgent = @"Fiddler";
                req.KeepAlive = true;
                req.ProtocolVersion = HttpVersion.Version10;
                req.ServicePoint.ConnectionLimit = 24;
                req.Headers.Add("UserAgent", "Pentia; MSI");
                ServicePointManager.Expect100Continue = true;
                System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
              
                //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
                ServicePointManager.DefaultConnectionLimit = 9999;
                
                //WebResponse response = req.GetResponse();
                //Stream responseStream = response.GetResponseStream();

                using (Stream stm = req.GetRequestStream())
                {
                    using (StreamWriter stmw = new StreamWriter(stm))
                    {
                        stmw.Write(soap);
                    }
                }

                WebResponse response = req.GetResponse();



Пожалуйста, помогите мне, как я могу избавиться от этой проблемы. ваша помощь будет оценена по достоинству!

Что я уже пробовал:

Я пробовал использовать TLS 1.0, 1.1 и 1.2, но всегда получаю такой ответ.

1 Ответов

Рейтинг:
1

jkirkerx

Я работал с этим летом для соблюдения требований PCI и сдвига в отрасли, чтобы ужесточить безопасность.
У меня нет решения в коде, но я укажу вам правильное направление здесь.

Из того, что я узнал, вы должны соответствовать определенным требованиям.
свой компьютер:
1. Должен уметь обрабатывать TLS 1.2 и есть шифр достаточно сильны/слабы, чтобы поддержать его.
Настройки TLS-SSL[^]

2. Ваша версия .Net должен поддерживать TLS 1.2
Поддержка TLS 1.2 и .NET: как избежать ошибок подключения | Microsoft[^]

Что касается кода, то не каждая служба будет поддерживать TLS 1.2, поэтому вы должны иметь возможность переключаться на более низкие версии и обрабатывать плохой ssl-сертификат

//Override any SSL Certificate Errors and set the encryption levels
ServicePointManager.ServerCertificateValidationCallback = certificate_Callback.CertificateValidationCallBack;                
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;


Быстрый способ отредактировать реестр вашего ПК или сервера для продвинутых шифров - это использовать такой инструмент, как этот IIS Crypto, но для его изучения требуется время.
Программное обеспечение Nartac-IIS Crypto[^]

А затем изучите, какие шифры можно использовать сейчас, вам понадобятся некоторые старые шифры для подключения к exchange server, удаленным серверным инструментам, пока вы их не обновите.
Рекомендации по упрочнению шифров TLS/SSL - Acunetix[^]

И изучите PCI, по отношению к SSL и TLS
PCI 3.1: немедленно прекратите использовать SSL и устаревший TLS[^]

На стороне записки,
Вы действительно должны получить файл WSDL и создать ссылку на службу для кода, а затем использовать soap-клиент для передачи и получения ответа soap.
Но вы должны по крайней мере иметь возможность обработать рукопожатие TLS перед передачей вашей строки