这是我关于堆栈溢出的第一个问题,我会努力的!
我已经阅读了有关SLL / TLS连接如何工作的多个文档。我没有发现正在发生的任何线索。
我当前正在通过SSL连接到服务器。 我的操作系统是Windows 10。 服务器要求我们提供的证书。 那里一切都很好。 SSL连接已建立。
现在,当我尝试从服务器建立连接时,我收到Web异常(“请求已中止:无法创建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;
}
我们已经验证
我们的服务器可以识别远程服务器发送的证书。
我们的服务器可以加载我们的证书。 (它是从商店加载的)
我们的服务器可以访问我们证书的私钥
欢迎任何帮助!
答案 0 :(得分:0)
似乎远程服务器正在执行客户端身份验证(请参阅证书请求),并且它可能不信任您的证书。