"Could not create SSL/TLS secure channel" 尽管 SCHANNEL 报告 "An SSL server handshake completed successfully."

"Could not create SSL/TLS secure channel" even though SCHANNEL reports "An SSL server handshake completed successfully."

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

System.Net.WebException : The request was aborted: Could not create SSL/TLS secure channel.

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

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

问题:


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


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


更新:在查看 local 机器的事件查看器后(不要问我为什么会这样),有相应的失败连接条目:

(SCHANNEL) A fatal error occurred when attempting to access the SSL client credential private key. The error code returned from the cryptographic module is 0x8009030d. The internal error state is 10003.

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

确保访问客户端证书的进程可以访问证书的私钥。

MMC Console with the Certificate Plugin -> Right Click the specified certificate -> All Tasks -> Manage Private Keys.

我的问题的答案:

Why does (how can) the secure SSL/TLS channel creation fail after the "handshake completed successfully"?

handshake/negotiation 阶段后,安全通道加密仍然会失败,这只决定 certs/crypto 使用什么。在这种情况下,这是因为私钥(在客户端证书上)由于安全限制不可用。

Is an HTTP 403 Forbidden status response, and possible WebClient processing of such, a factor at all? If not, this inquiry path can be abandoned.

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

What is a good next step in debugging the issue? Is there a certain monitorable event to indicate success (or failure) after the initial negotiation?

查看相关事件日志 - 在本例中是 local 机器的 schannel 日志,其中报告了严重错误消息。如果 enabling tracing as discussed here.

也可能会发现错误

我在这里针对同一条消息尝试了所有方法,结果发现需要向服务器上的用户授予 MachineKeys 文件夹 (C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys) 的安全权限。 MSDN article with common solutions to this problem