Это мой первый вопрос о переполнении стека, я сделаю все возможное!
Я уже прочитал несколько документов о том, как работает соединение SLL / TLS. Я не нашел никакой подсказки о том, что происходит.
Я сейчас подключаюсь к серверу через SSL.
Моя ОС - Windows 10.
Сервер запрашивает у нас сертификат, который мы предоставляем.
Там все хорошо. Соединение SSL установлено.
Теперь, когда я пытаюсь установить соединение с моего сервера, я получаю веб-исключение («Запрос был прерван: не удалось создать безопасный канал SSL / TLS».)
Операционная система сервера - Windows Server 2012 R2.
Я почти уверен, что наш сервер закрывает соединение (см. Прикрепленное изображение внизу поста).
код для загрузки сертификата
X509Certificate cubicCertificate;
try
{
cubicCertificate = X509CertificateHelper.GetCertificate2FromStore(cubicCertificateThumbPrint);
}
catch(Exception e)
{
m_Log.Trace("Cubic Http client initialization - Could not load certificate");
throw e;
}
var handler = new WebRequestHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ClientCertificates.Add(cubicCertificate);
ServicePointManager.ServerCertificateValidationCallback = ValidateServerCertificate;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
m_HttpClient = new HttpClient(handler);
m_HttpClient.Timeout = new TimeSpan(0, 0, 30); // 30 seconds timeout
m_HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Код для отправки запроса
try
{
var requestMessage = new HttpRequestMessage(HttpMethod.Post, $"{cubicUrl}");
requestMessage.Content = new FormUrlEncodedContent(parameters);
m_Log.Trace($"URL - {m_HttpClient.BaseAddress}{url}");
Task <HttpResponseMessage> task = m_HttpClient.SendAsync(requestMessage);
responseMessage = task.Result;
}
catch(Exception e)
{
var serializedException = JsonConvert.SerializeObject(e);
m_Log.Trace(serializedException);
throw e;
}
Мы уже подтвердили
что сертификат, отправленный удаленным сервером, распознается нашим сервером.
что наш сервер может загрузить наш сертификат. (Загружается из магазина)
что наш сервер может получить доступ к закрытому ключу нашего сертификата
Любая помощь приветствуется!