我在一台 WS 2019 机器上遇到了一个非常奇怪的问题。基本上,我们在将 LOB 应用程序连接到他们的云服务时遇到了麻烦。乍一看,问题似乎出在 TLS 协商上,但我不明白它在哪里失败了。
我已经能够将其缩小到单个端点。当尝试连接到https://collabmaintenance.myob.com/使用 IE11(因此使用系统库和 schannel),它会显示“无法安全连接到此站点”错误消息。从同一台机器运行时,Firefox 和 Chrome 连接良好(导致 401 权限被拒绝,这是预期的),因此这不是防火墙问题。连接到,例如,https://login.myob.com使用任何浏览器均可成功。
我看过的东西:
数据包跟踪显示连接已成功建立,但客户端(本地计算机)在收到 TLS 1.2 Server Hello(服务器选择的密码套件是 Client Hello 中提供的套件之一)后立即将其丢弃。它在服务器有机会发送证书之前就被丢弃了,因此这也不是证书问题。(编辑后添加:不是“丢弃”而是“关闭”,因为客户端发送的是 FIN 数据包,而不是立即发送 RST)
使用 Nartac Software 的 IISCrypto 检查了 schannel 的密码和协议(看起来不错),并应用了一个稍微不那么严格的模板,允许 TLS 1.0 及以上版本。是的,我知道它不太安全,但我想确保它不是那样。
彻底禁用 Windows 防火墙。服务器上也没有运行任何防病毒软件。
我还尝试按照某人的建议使用 PowerShell 发出请求,
try { Invoke-WebRequest https://collabmaintenance.myob.com/ -UseBasicParsing } catch { write-host $_.exception }
并得到以下内容
System.Net.WebException:请求已中止:无法创建 SSL/TLS 安全通道。
无论我通过发出以下命令强制使用 TLS 1.0、1.1 还是 1.2,错误都是相同的
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls (or Tls11 or Tls12)
如果我尝试强制使用 SSL3,则错误消息会有所不同:
System.Net.WebException:底层连接已关闭:接收时发生意外错误。---> System.ComponentModel.Win32Exception:客户端和服务器无法通信,因为它们没有通用算法
我还需要检查什么?我已经束手无策了。
附言:请在写答案之前先理解问题。诸如“使用其他浏览器”或“检查 SSL 证书”之类的低效答案没有帮助。