我有一个使用 Forefront TMG 作为 HTTPS 网站发布的网站。它具有有效的 SSL 证书 (EV)。该网站在除 Safari、Midori 和 Dolphin 之外的所有浏览器上均可正确显示。
问题是 Safari 根本无法连接到网站。好像网站根本不响应请求。没有文件传输。连接完全断开。至少在很长一段时间内(30 秒到几分钟)都是如此。
我有几个不同的网站通过 HTTPS 配置。不同的域名、不同的 IP 和不同的证书。证书来自不同的颁发者。
我的所有 HTTPS 网站都存在此问题,仅在使用 Safari、Midori 和 Dolphin 浏览器时存在此问题,其他所有浏览器上这 3 个网站均正常运行。没有延迟,没有报告任何问题。
我尝试在 TMG 侦听器上禁用 HTTP 到 HTTPS 重定向以排除证书问题。我也无法通过 http 访问我的网站。但是,可以通过 Firefox、Opera、Chrome、IE、Vivaldi、Slimjet 和 Edge 浏览器完美访问它们。
有时我可以在 Safari 上显示单个页面,但显示需要 30 多秒,而且缺少一些图像(和/或 CSS)。然后 - 网站失败,因为页面上的 AJAX 失败,尽管 CORS 标头配置正确,引用的 URL 甚至可以响应(延迟很大)。
它看起来是这样的:你输入 URL 并收到一条关于该网站无法访问的消息。然后,如果你多次刷新页面,它终于出现了,但严重损坏(就像许多文件无法访问一样)。
在其他浏览器上没有延迟。所有文件均可立即访问。
在我的“Web 访问策略”选项卡中,我已禁用所有检查和代理选项。
最奇怪的是 - 我在同一台服务器上有另一个网站(HTTP),但发布在不同的 IP 上。该网站在所有浏览器上都可以正常运行。所有 IP 和路由似乎都配置正确,如果没有,其他浏览器将如何显示这些网站?
顺便说一句,网站本身绝对没有这个问题。即使我尝试打开网站上的一个 HTML 文件或图片,也无法通过 Safari 获取。
重要提示:网站 SSL 证书信息显示正确,这是从这些网站下载的唯一内容。所以我看到挂锁图标、网站信息,但没有内容。允许 HTTP 连接后,它也无法通过 HTTP 工作。在某些浏览器上可以通过 HTTP 工作。
重要提示:当省略 TMG 时(通过 VPN,直接引用我的 NLB IP),所有浏览器都可以访问上述网站。
当我们将虚拟服务器移至新网络上的新主机时,问题就开始了。在旧网络上,一切正常。但话说回来 - 内部网络配置导致网站仅在某些浏览器上无法访问,这到底是怎么回事?
更新
我尝试了很多方法,比如更改 CISCO ASA 防火墙上的 MTU,但都没有用。我尝试使用本教程更新 TMG 上的 SSL 配置:
我最终测试甚至没有完成。此外,我还收到有关“服务器配置不一致”的警告。它以“长握手解决方法:握手不超过 0x200 字节:132”消息停止。好吧,我将域 www.example.com 和 example.com 设置为不同的地址。这是故意的。其中两个之间有几个重定向。顺便说一句,www 站点有自己的证书,以防有人用 https 输入其 URL。但它大多不使用。是的,我替换了非 www 服务器的证书,但 www 仍然没有更新。这是一个错误,但它应该只影响 www 站点。但行为不端的是https://example.com, 不是https://www.example.com。
哪里出了问题?由于上次运行良好,我在不同的主机上安装了相同的 TMG VM。我的网站位于不同的(较旧的)IIS 服务器上。我有不同的外部 IP,没有 DMZ。而且证书不同,较旧,密钥为 128 位而不是 256 位。没有 CISCO ASA 防火墙。我们将所有网站移至新机器后,就出现了这种情况。它们可以在除 Safari、Midori 和 Dolphin 之外的任何浏览器上运行。
更新
我通过 VPN、ASA 连接到内部网络。如果我将站点域 IP 直接设置为内部 NLB 地址 - 它可以工作。如果我设置为 DMZ IP - 则不行。当然,对于外部 IP - 也不行。当然 - 这 3 条路径在大多数浏览器上都可以完美运行,只有 Safari、Midori 和 Dolphin 受到影响。
顺便说一句,同一个 CISCO ASA 将我的网络请求路由到公共网络。
BTW2:纯 HTTP 站点(无证书)来自相同的 IIS->NLB->TMG->DMZ->ASA - 可在 Safari 上运行,不会出现任何延迟或其他问题。我唯一没有测试的是删除证书并仅设置 HTTP 访问。这是一个生产网站,如果我要这样做,我应该在晚上匆忙完成。
答案1
这听起来像是一个基本的网络连接问题。症状通常是由于 MTU 配置错误而发生的。或者 TGM 可能会抛出一些东西,但我对此了解不多,无法判断。
我建议首先使用减小的 MTU 进行测试 - 将服务器或客户端或两者的 MTU 设置为 1200 是一个不错的起点。或者,您可以对连接进行 wireshark 检查,以查看正在协商的 TCP 参数类型,然后从那里开始。
[编辑] 在 Windows 上更改 MTU 略微取决于您所运行的 Windows 版本,因为没有指定,我只是提供了通用的 Google 结果: