在 Windows 7 上强制使用 TLS 1.2

在 Windows 7 上强制使用 TLS 1.2

问题是关于强制 Win7 仅使用 TLS 1.2。(是的,我知道 Win7 不再有补丁,别介意。)

根本问题是 Ubisoft Connect 无法正常工作。我认为日志表明这与使用错误版本的 TLS 有关。日志:

Http status code is 404 for url https://wallet.ecom.ubi.com/...
Http status code is none  for url https://channel-service.upc.ubi.com/...

(HTTP 状态代码为无?日志文件中的其他调用正常工作,这表明请求本身存在一些根本问题。例如 TLS 问题。但可能不是,所以我想能够检查 TLS 1.2 是否配置为唯一可用的协议 - 我怀疑不是。)

使用 SSLLabs,我查看了这些网站支持的 TLS 版本:

似乎不同之处在于wallet支持TLS 1.0 和 1.1但不是1.3并且channel-service不支持1.0 和 1.1,但确实支持1.3. (但我并不想使用 1.3。)

自从1.2似乎两者都支持,这就是我希望 Ubisoft Connect 使用的版本。所以我尝试将我的 Win7 配置为使用仅限 TLS 1.2, 和根本不使用 1.0/1.1。(遗憾的是,不支持 1.3。)

我已经读完了https://support.microsoft.com/en-us/topic/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-winhttp-in-windows-c4bd73d2-31d7-761e-0178-11268bb10392

那么我该如何配置 Windows 7 仅使用 TLS 1.2检查设置是否正常工作

这是我的注册表: 在此处输入图片描述 在此处输入图片描述

答案1

我终于搞明白了,下面是解释。也许对其他人也有用。

中的注册表更改SCHANNEL\Protocols运行正常。可以使用 Internet Explorer 进行测试。Firefox 带有自己的 HTTPS 代码,因此无法使用它进行测试。

当您启用Enable=0所有 HTTPS 加密协议时,Internet Explorer 中将不再支持任何 HTTPS 网站。Ubisoft Connect 也不行,您甚至无法登录。我停用了所有协议(SSL 2.0、SSL 3.0、TLS 1.0、TLS 1.1),但 TLS 1.2 除外。这样,TLS 1.2 将始终被使用。(Win7 不支持 TLS 1.3。)然后登录又可以正常工作了,因为处理该问题的服务器似乎不受下面解释的问题的影响。

问题是,https://channel-service.upc.ubi.com/不允许Windows 7 支持的任何密码套件。而 Windows 7 不允许您安装新的。Ubisoft 端点支持的列表相当小:https://www.ssllabs.com/ssltest/analyze.html?d=channel-service.upc.ubi.com&s=54.147.167.217

# TLS 1.2 (suites in server-preferred order)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)   ECDH x25519 (eq. 3072 bits RSA)   FS   128
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)   ECDH x25519 (eq. 3072 bits RSA)   FS   256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)   ECDH x25519 (eq. 3072 bits RSA)   FS     256

这些似乎都不在 Windows 7 中可用。

可以使用 Internet Explorer 访问 Github.com 和 Ubisoft 端点进行测试。Github 可以工作,但 Ubisoft 端点不行。两个站点都使用 TLS 1.2,但 Github 允许使用更多种类的密码套件:https://www.ssllabs.com/ssltest/analyze.html?d=github.com

# TLS 1.2 (suites in server-preferred order)
TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)   ECDH x25519 (eq. 3072 bits RSA)   FS     128
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)   ECDH x25519 (eq. 3072 bits RSA)   FS   128
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca9)   ECDH x25519 (eq. 3072 bits RSA)   FS   256P
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8)   ECDH x25519 (eq. 3072 bits RSA)   FS     256P
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 (0xc02c)   ECDH x25519 (eq. 3072 bits RSA)   FS     256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)   ECDH x25519 (eq. 3072 bits RSA)   FS   256
TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 (0xc023)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK  128
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK    128
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 (0xc024)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK  256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK    256
TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK     256
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)   ECDH x25519 (eq. 3072 bits RSA)   FS   WEAK   256
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c)   WEAK   128
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d)   WEAK   256
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c)   WEAK   128
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d)   WEAK   256
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f)   WEAK  128
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)   WEAK  256

因此,我得出的结论是,育碧应该至少添加一个Windows 7 支持的密码套件添加到他们相关端点服务器的可接受列表中。这将是明智、好的解决方案。他们会这样做吗?... :|

我的解决方法是欺骗他们的端点服务器,方法如下:

  • 为主机名创建一个自签名证书channel-service.upc.ubi.com,将其作为根证书安装在我的计算机上,并在我的网络中安装另一个(带有 Windows 10)证书。这是必要的,因为我们将假装是 Ubisoft 端点,但实际上我们不是。HTTPS 客户端仅检查证书链是否返回到某个根证书,正如我们刚刚添加的那样。
  • 使用 ASP.NET Core 创建一个 Web 服务器应用程序,该应用程序仅接收连接,并将它们“管道化”到真正的 Ubisoft 端点(整个 HTTP 请求),然后管道化返回响应。这需要接受 HTTPS 连接并发回由我们的服务器加密的适当响应。(因此不仅仅是转发 TCP 流量)
  • 在我的计算机上的 hosts 文件中添加一个条目,以重定向channel-service.upc.ubi.com到我网络中的另一台计算机。这是必要的,以便 Ubisoft Connect 可以与我们的网络服务器应用程序通信,而不是尝试向互联网发出请求。
  • 在另一台 (Windows 10) 计算机上运行 Web 服务器应用程序。这是必需的,因为 1) 我们无法连接到修改了 hosts 文件的计算机上的实际 Ubisoft 端点,2) 我们无法使用它HttpClient连接到 Windows 7 计算机上的 Ubisoft 端点,因为那样会失败,就像 Internet Explorer 和 Ubisoft Connect 会失败一样。但它确实适用于 Windows 10。它也适用于 Java 程序。

现在,我能够为网络上所有运行 Windows 7 的机器提供“网关”?“代理”?以便与实际的 Ubisoft 端点进行通信。他们只需要根证书和主机文件修改。太好了,我现在可以玩多人游戏并再次使用聊天功能了。:)

我猜你也可以配置一个真正的代理?嗯,不确定。

相关内容