tl;dr 我在让 TMG 正确地将外部的 HTTPS 连接反向代理为内部的 HTTP 连接时遇到了麻烦。
我们有一个 LAN (10.0.7.0/24),其中托管着一个 Windows Server 2008 机箱,并安装了 Spiceworks。Spiceworks 使用 Apache,并配置为同时提供 HTTP 和 HTTPS 服务。只要您从 LAN 浏览它,它就可以正常工作,没有问题。
我们还有一个 DMZ(172.32.16.0/24),其中托管着一台 Forefront TMG 服务器,该服务器可以访问 LAN 和 Internet。因此,我们尝试设置反向代理规则,让用户可以从 Internet 访问 Spiceworks 实例。
对于 HTTP,它运行完美 - 流量通过 TMG,并中继到 Apache 服务器,很棒。对于 HTTPS,情况就不一样了。TMG 使用其端的证书建立连接,但无法通过 HTTPS 连接到 Apache 服务器,并因超时错误而死机。
我认为这不是网络问题,因为 HTTP 运行正常。这不是 Spiceworks 的 HTTPS 问题,因为在 LAN 上浏览它运行正常。我怀疑 TMG 在验证我们在 Apache 服务器上使用的证书时遇到了麻烦,这就是为什么我收到 HTTP 500 错误“提供给函数的令牌无效”。
TMG 使用的证书与 Spiceworks 服务器上的证书相同(都是 GoDaddy 通配符证书)——这有什么关系吗?我们无法替换该证书,因为它在很多地方使用,所以如果有解决方法,或者我可以更改 TMG 配置设置,那就太好了。
我的另一个选择是让 TMG 代理https://subdomain.domain.tld:443在外面http://子域名.域名.tld:80在内部,完全绕过 SSL 问题,但也没有用——TMG 固执地拒绝以这种方式重写 URL。