【问题标题】:configuring reverse proxy https with multiple certificates with Apache使用 Apache 配置具有多个证书的反向代理 https
【发布时间】:2017-01-18 21:42:53
【问题描述】:

我有以下设置:

  • 一个公共 IP
  • 上面2个不同的域名指向同一个IP:domain1.com和domain2.com
  • 2 个不同的 ssl 证书:一个用于 domain1.com,一个用于 domain2.com
  • 运行 Apache2 和 debian 8.5 的同一 LAN(192.168.1.10 和 192.168.1.20)上的 2 台物理机

我测试了两台服务器,将 443 端口流量独立转发到其中一台机器。他们工作得很好。

现在,我将所有到达公共 IP 的端口 443 请求转发到位于 192.168.1.10 的第一台服务器,我希望这台服务器充当 https://domain1.com 的 https 服务器,并将 https://domain2.com 的请求重定向到地址 192.168.1.20

我尝试在第一台机器上配置反向代理。它确实将 domain2 的请求重定向到 192.168.1.20 的机器,但它为 domain1 提供证书。 如何配置反向代理,以便为我的每台服务器提供正确的证书?

提前谢谢你。 朱莉娅

【问题讨论】:

  • 服务器需要根据 SNI 扩展名(服务器名称指示)选择要使用的证书。看看 Apache 中的 SNI 支持,它可能支持它。
  • 谢谢。我确实研究了 SNI,但无法使其工作。我是 linux 的新手 :(
  • 你可以为代理机器发布你的服务器块吗?

标签: apache ssl proxy


【解决方案1】:

最简单的“解决方案”(好吧,解决方法)是使用包含两个主机名的单个证书。如果不能这样做,则需要配置 Apache SNI,如下所示:SSL with Virtual Hosts Using SNI

【讨论】:

  • 这不能回答我的问题,因为所有证书都必须安装在运行 apache 的机器上。因此,从那台机器到我局域网上其他服务器的流量不再是 https,而是 http。
  • 因为你在第一台服务器上有domain2的证书,所以你局域网上的流量不会改变,仍然是https,它被转发到第二台服务器的443端口。
【解决方案2】:

正如一些人建议的那样,我尝试使用 Apache2 反向代理。 这在某种程度上可行,但您必须在运行 Apache2 的机器上安装所有证书。因此局域网上的流量不再是https,这不符合我的要求。

解决方案是使用 haproxy。可以将此包设置为 https 的传递。互联网上有许多此类应用程序的示例。它完全符合我的要求:我可以在具有单个公共 IP 的 nat 路由器后面的局域网上托管许多 https 服务器。流量由 haproxy 作为 https 发送到 LAN 上的指定服务器。如果有人有兴趣,我很乐意分享我的配置文件,以解决我在问题中提出的问题。

【讨论】:

  • 是的,请分享,我想看看您如何避免在 nat 路由器上拥有 domain2 证书。
  • 这是我的配置,要添加到默认 haproxy.cfg 文件的末尾:
【解决方案3】:

致罗伯特 M: 这是我要在默认 haproxy.cfg 文件末尾添加的配置:

    frontend ft_https
    mode tcp
    option tcplog
    bind *:443

    tcp-request inspect-delay 5s
    tcp-request content accept if { req.ssl_hello_type 1 }

    acl domain1_com req.ssl_sni -m end  domain1.com # all url ending with domain1.com   
    acl domain2_com req.ssl_sni -i www.domain2.com # exactly www.domain2.com

    use_backend b_domain1_com if domain1_com
    use_backend b_domain2_com if domain2_com
    default_backend b_default

    backend b_default
    mode tcp
    option tcplog
    server srv_default 127.0.0.1:1443

    backend b_domain1_com
    mode tcp
    option tcplog
    server srv_domain1 192.168.1.10:1443

    backend b_domain2_com
    mode tcp
    option tcplog
    server srv_domain2 192.168.1.20:443

我不得不将第一台服务器上 apache 的 https 端口更改为 1443,因为 haproxy 和 apache 无法绑定到相同的 443 端口,因为它们驻留在同一台机器上,但它对用户是透明的。

【讨论】:

    猜你喜欢
    • 2021-03-05
    • 2010-09-21
    • 2015-08-07
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多