服务器发送服务器HELLO DONE

时间:2018-09-12 18:33:55

标签: c# ssl connection tls1.2

这是我关于堆栈溢出的第一个问题,我会努力的!

我已经阅读了有关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;
        }

我们已经验证

  • 我们的服务器可以识别远程服务器发送的证书。

  • 我们的服务器可以加载我们的证书。 (它是从商店加载的)

  • 我们的服务器可以访问我们证书的私钥

Here is an sample of the communication (WireShark)

欢迎任何帮助!

1 个答案:

答案 0 :(得分:0)

似乎远程服务器正在执行客户端身份验证(请参阅证书请求),并且它可能不信任您的证书。