TLS 协议定义的致命警报代码是 70

The TLS protocol defined fatal alert code is 70

我正在尝试从 Windows 浏览器访问 SSL URL 到另一台机器 运行 Tomcat,我在系统中看到来自 Schannel 的错误 36887 Windows 机器上的事件日志描述如下:

The TLS protocol defined fatal alert code is 70

根据 MS 文档:

我在 Windows 机器上打开了 Schannel 日志记录 (max=7),我可以看到 SSL 握手是正确协商的,这来自事件日志:

An SSL server handshake completed successfully. The negotiated cryptographic parameters are as follows.
  Protocol: TLS 1.2
  CipherSuite: 0xC028
  Exchange strength: 256

这似乎与代码 70 错误相矛盾。

密码组 0xC028 是 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384。我检查了 Tomcat 机器,可以看到这是可用的,而且两台机器上也启用了 TLS1.2,所以成功的握手是有意义的。

与代码 70 错误关联的进程 ID 属于 lsass.exe - 我的 Windows 知识非常有限,所以我不知道那是什么。

我在 Tomcat 机器上的 catalina.out 日志中找不到任何内容,代码 70 似乎是在实际发送请求之前发生的。我确信证书都配置正确,因为我可以从其他机器成功访问 URL。

我怎样才能从这里进步?

这意味着尝试使用可识别但不受支持的 TLS 版本与服务器通信。例如,如果您的服务器设置为仅接受使用 TLS 1.2 或更新版本的通信,那么任何尝试通过 TLS 1.1 或更低版本进行通信的内容都会抛出此错误。

两台计算机必须先就通信方式达成一致,然后才能真正进行通信。这就是为什么会出现此错误消息,然后计算机似乎可以正常通信的原因...第一种方法已尝试并被拒绝,然后尝试了一种新方法并成功了,仅此而已。

问题原来是我们的一个客户端应用程序正在使用 .NET 4.5.2 并默认为 TLS1.1,它已在服务器端通过一些补丁被禁用。最终 .NET 更新到 4.7.2 解决了这个问题。