【问题标题】:Connection with the server was terminated abnormally与服务器的连接异常终止
【发布时间】:2019-03-22 15:22:29
【问题描述】:

我有一个 django-python 服务器,它带有一个使用 winhttp 和 REST API 连接的 VBA 前端。因此,在这种情况下,发送和接收的请求由我们控制并由我们自行确定。

不久前,当我们的服务器从 SSL 更新到 TLS 时,我们有很多用户在使用 VBA Winhttp 和 REST API 时面临“连接异常终止”错误。我们使用现有的微软文章更新了Windows 7上用户的机器,问题得到了解决。最近,我遇到了一些相同错误的案例,其中补丁/更新之前已应用,或者其应用程序没有解决问题。

我在我们的服务器日志上根本看不到他们的传入流量(有些正在使用代理服务器),但甚至代理服务器 ip 也不存在。

我正在尝试找出在哪里查看或其他可能导致此问题的原因,以便我可以追踪它。任何想法/建议表示赞赏。

来源:Update to enable TLS 1.1 and TLS 1.2 as default secure protocols in WinHTTP in Windows

【问题讨论】:

  • 您是否也手动更改了注册表项?还是您只使用网站上的快速修复?
  • 这些用户是远程用户且不精通技术,因此用户注册表中没有任何内容,只有快速修复。在许多情况下,快速修复就足够了,而且其中一位有问题的用户之前也有过快速修复并且工作正常。
  • 您还必须更改注册表项值。 quickfix 只会创建它们,但并不总是具有正确的默认值。由于我们使用 winhttp 并且最近决定只允许 TLS 1.2,因此我们最近处理了很多此问题。
  • 我明白了,很高兴知道。如果我使用 hreq.Option(WinHttpRequestOption_SecureProtocols) = 512 或 2048 从前端 VBA 代码中设置它怎么样?如果它不正确,是否可以绕过注册默认值?我知道只有在应用补丁和快速更新时才定义 512/2048。所以我可能需要做一些错误处理。

标签: excel vba rest winhttp


【解决方案1】:

供以后有类似问题的访问者参考:

我一直在面对 Windows 7 客户端上的 TLS 问题,并根据下面总结的 Microsoft 文章进行了一轮修复:

第 1 步:获取 Microsoft 更新 KB3140245: 下载相关(32位或64位用户Windows版本) Microsoft Security Protocol Update 如果尚未安装,请安装。

第 2 步:下载 Microsoft Easy Fix: 从以下位置下载 Microsoft “Easy Fix” Microsoft Support Article,并执行将 TLS 1.1+ 设置为默认值。

然而,后来,我又遇到了另一轮类似的问题,这让我意识到微软页面上的修复工具不会设置所有的注册表项(缺少 SChannel 注册表项)。因此,我设法将一些脚本放在一起,通过设置 Internet 选项和 SChannel 来进行完整修复。需要添加 TLS1.1/1.2 的 SChannel 注册表项来设置 Winhttp 默认启用 TLS。

WinHttp 键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
==> DWORD DefaultSecureProtocols=0x00000A00 (32-bits and 64-bits)

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp
==> DWORD DefaultSecureProtocols=0x00000A00 (64-bits)

SCHANNEL 键:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client 
==> DWORD DisabledByDefault=0x00000000

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client
==> DWORD DisabledByDefault=0x00000000

全面修复:Microsoft 补丁没有修复所有注册表项以更新 WinHTTP 默认值并跳过 SChannel 项。因此,如果两步修复 abpve 没有解决问题,这个 github 项目包含 powershell 脚本,用于下载和应用上面列出的所有必需的注册表修改,并且可能有助于更全面的一次性修复:Winttp-TLS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多