使用 pfSense、Varnish 和 Tomcat 实现 HTTPS

使用 pfSense、Varnish 和 Tomcat 实现 HTTPS

情况

我有一台 ESXi 服务器托管多个虚拟机,包括 pfSense、Varnish 和 Tomcat 各一台。它们的配置如下:

  1. pfSenseVM(防火墙,IP=10.0.0.1)

    • NAT 规则从端口 80 到VarnishVM:80端口 443 到VarnishVM:443
    • webConfigurator 监听端口 443
    • webConfigurator 无法从外部访问
    • 已安装默认 SSL 证书,如下CN=Common Name (eg, YOUR name)所示系统>证书管理器
  2. VarnishVM(代理,IP=10.0.0.2)

    • 将请求路由my.domain.com:443到后端Tomcat:8443
  3. TomcatVM(应用服务器,IP=10.0.0.3)

    • 连接器监听server.xml端口 8443
    • 上述连接器使用的密钥库中导入了自签名证书
    • 自签名证书有 CACN=*.domain.com

问题

我似乎收到了错误的证书(CN=Common Name (eg, YOUR name))。

  • 当我https://my.domain.com在浏览器中输入时,它一直在加载,经过几次尝试后,我在 Firebug 中看到请求已中止。varnishlog 显示暂停
  • 当我wget https://my.domain.com从 调用时TomcatVM,收到的证书是在 pfSense 中安装的并且由于证书而无法正常工作CN。我相信这是关键。
  • 当我wget https://localhost:8443从 调用时TomcatVM,收到的证书是安装在 Java 密钥库中的密钥,这是正确的,但显然不起作用,因为localhost不匹配*.domain.com

为什么我会收到错误的证书?我只能假设我需要从 pfSense 配置 webConfigurator 以监听不同的端口。如果这是正确的,我该怎么做?

更新

我现在有一个 Pound 实例(PoundVM)并让 webConfigurator 位于不同的端口上。

  • pfSense 现在有一个从端口 443 到PoundVM:443替换一个VarnishVM:443
  • PoundVM(IP=10.0.0.4)
    1. Pound 监听 443 端口,配置如下

它仍然不起作用。Firebug 仍然显示“已中止”,我看不到来自 Pound 的任何日志消息。

我还应该注意,(自签名)证书是TomcatVM使用 OpenSSL(.crt)创建的,并导入到 Java 密钥库中。然后我将其和私钥复制到PoundVM并使用创建了一个 .pem 文件本指南.Cert中的值磅配置指向此文件。对吗?

更新2

我在磅配置,HTTPS 侦听器侦听的地址现在是 10.0.0.4,而不是 127.0.0.1,并且可以从外部访问 Pound。现在它给我一个 HTTP 414:请求 URI 太长,尽管请求的 URI 大约有 200 个字符长。我发现MAXBUF在编译 pound 时可以配置。但我使用 apt 安装它...尽管如此,我发现 414 很奇怪,因为 URI 是https://my.domain.com/some/path/that/is/certainly/not/1024/bytes/long

更新 3

现在,我通过重定向到 Tomcat 的 HTTP 端口(而不是 HTTPS)使它正常工作。Pound 对我来说很新,我认为我可以将加密请求重定向到 Tomcat。

答案1

webConfigurator 位于端口 443 上,您的 NAT 也是如此。您无法同时实现两者。您提到移动 webConfigurator 仍然不允许此操作;我猜 pfSense 对端口 443 应用了一些特殊的魔法来限制管理员访问。您可以禁用此魔法,也可以执行很多更简单的选项,要么针对不同的端口或不同的 IP 运行 NAT。在这两种情况下,单独的端口可能要容易得多。假设您选择了 8443(为了与 Tomcat 服务器保持一致)。然后您可以通过https://my.domain.com:8443

现在,尽管如此,你还是没有解释你在这里是如何解码 SSL 的。Varnish 不适用于 SSL 流量。因此,即使你让它工作了,它也不会起作用。所以你要么需要再补充一点你的解释,要么重新考虑/放弃使用 Varnish。我见过的一个常见解决方案是使用专用的 SSL 解码代理,比如,在 Varnish 前面。

另请参阅“为什么没有 SSL“Varnish 网站上的常见问题解答。

相关内容