"Could not create SSL/TLS secure channel"即使 SCHANNEL 报告"An SSL server handshake completed successfu



我正在从单元测试中追踪臭名昭著的"SSL 异常" - 在 ReSharper 下运行测试、从我的帐户下的控制台运行测试以及在构建服务器集成测试中生成相同的异常。在本地,代码从安装了 .NET 4.5.1 的 Windows 7 计算机运行。

System.Net.WebException : 请求已中止: 无法创建 SSL/TLS 安全通道。

我相当确定它与证书没有严格关系,尽管它们最近已更新。(确切的失败时间很接近,但不确定 - 另一方面,这是不同环境中最可能的相关变化。

IIS 设置为需要客户端证书,并且与同一端点的 HTTPS 连接在 Chrome 中为"绿色"。如果我在 Chrome 中选择无效的客户端证书,我会收到一条来自 IIS 的 403 消息,该消息是通过成功创建的 HTTPS 连接提供的

问题:

  • 为什么在"握手成功完成"后(如何(安全 SSL/TLS 通道创建失败?

  • HTTP 403 禁止状态响应以及可能的 Web 客户端处理是否是一个因素?如果没有,可以放弃此查询路径。

  • 调试问题的下一步是什么?在初始协商之后,是否有某个可监控的事件来指示成功(或失败(?


以下是在消除其他帖子中发现的问题时收集的内容:

  • 这是异常树的结尾;没有内部的"根据验证过程,远程证书无效"异常,这是我对证书错误的预期。

  • 启用 SCHANNEL 的"所有日志记录"后,服务器将显示

    SSL 服务器握手成功完成。谈判达成的 加密参数如下。

    协议: TLS 1.0/密码套件: 0x5/交换强度: 2048

  • 来自失败单元测试的SSL握手/协商在Wireshark上"看起来成功"。(它与Chrome请求不同,并且具有不同的协商CipherSuite。

  • HTTP 客户端超时为 100 秒,这应该是默认值。


有点好笑,第一个失败的测试是ShouldCompleteSslHandshakeFor[InvalidClientCert].


更新:查看本地计算机的事件查看器后(不要问为什么我刚刚想到这一点(,失败的连接有相应的条目:

(SCHANNEL( 尝试访问 SSL 客户端凭据私钥时发生致命错误。从加密模块返回的错误代码0x8009030d。内部错误状态为 10003。

这绝对是握手后加密通道失败的正当理由。

确保访问客户端证书的进程有权访问证书的私钥。

带有证书插件的 MMC 控制台 -> 右键单击指定的 证书 -> 所有任务 -> 管理私钥。

回答我的问题:

为什么在"握手成功完成"后(如何(安全 SSL/TLS 通道创建失败?

在握手/协商阶段之后,安全通道加密仍可能失败,该阶段仅决定使用哪些证书/加密。在这种情况下,这是因为由于安全限制,私钥(在客户端证书上(不可用。

HTTP 403 禁止状态响应以及可能的 Web 客户端处理是否是一个因素?如果没有,可以放弃此查询路径。

不。该错误是由 SSL/TLS 加密失败引起的,甚至在调用服务器处理程序之前。这是一个抓住稻草的错误问题。

调试问题的下一步是什么?在初始协商之后,是否有某个可监控的事件来指示成功(或失败(?

查看相关的事件日志 - 在本例中,这是本地计算机的通道日志,其中报告了严重错误消息。如果启用此处讨论的跟踪,则可能也会发现错误。

我在这里尝试了相同的消息的所有内容,结果发现需要将MachineKeys文件夹(C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys(的安全权限提供给服务器上的用户。包含此问题的常见解决方案的 MSDN 文章

最新更新