【问题标题】:Is it possible to run 2 servers with seperate SSL certificates on 1 IP address?是否可以在 1 个 IP 地址上运行 2 个具有单独 SSL 证书的服务器?
【发布时间】:2015-05-07 17:01:11
【问题描述】:

我有两个域在不同的本地服务器上运行,每个域都有自己的 SSL 证书。过去,这需要两个公共 IP 地址。随着 SNI(服务器名称指示)的出现,这两个站点可以通过像这样修改 Apache.conf 在同一台服务器上运行-

<NameVirtualHost *:443>

<VirtualHost *:443>
 ServerName www.yoursite.com
 DocumentRoot /var/www/site
 SSLEngine on
 SSLCertificateFile /path/to/www_yoursite_com.crt
 SSLCertificateKeyFile /path/to/www_yoursite_com.key
 SSLCertificateChainFile /path/to/DigiCertCA.crt
</VirtualHost>

<VirtualHost *:443>
 ServerName www.yoursite2.com
 DocumentRoot /var/www/site2
 SSLEngine on
 SSLCertificateFile /path/to/www_yoursite2_com.crt
 SSLCertificateKeyFile /path/to/www_yoursite2_com.key
 SSLCertificateChainFile /path/to/DigiCertCA.crt
</VirtualHost>

出于安全考虑,我更愿意在不同的本地服务器上运行这些站点,以帮助减轻损失,以防一台服务器受到损害。 这可以通过 Apache.conf 中的本地 IP 地址重定向来完成而不破坏 SSL 证书吗?
提前感谢您的任何建议。

【问题讨论】:

    标签: apache ssl sni


    【解决方案1】:

    由于您乐于使用 SNI,因此您的问题不在于在同一个 IP 地址(和端口)上使用两个证书,而在于将两台服务器绑定到同一个 IP 地址和端口时间。

    让两个不同的服务器侦听相同的 IP 地址和端口通常是不可能或有用的(取决于操作系统)。1

    也就是说,没有什么能阻止您运行其他 Apache Httpd 实例,即使是在同一台机器上监听不同的端口。

    要使客户端连接仍然使用端口 443,您可以让一个主 Apache Httpd 服务器运行并在该端口上侦听,并将其配置为其他服务器的反向代理,具体取决于访问的 VirtualHost。

    在这种情况下,该前端仍将处理两个证书(并且您通常只需要反向代理前端与同一主机上的其他服务器之间的纯 HTTP 连接,尽管您可能希望确保其他主机只能从localhost 访问)。

    另外,我见过(未尝试过)像sniproxy 这样的工具,它允许您检测 SNI 扩展中的主机名并将其重定向到其他套接字。原理类似,但每个后端服务器都会处理自己的证书。


    1。你可能会找到people mentioning using SO_REUSEADDR on the socket,但这并不能真正解决问题:如果另一个进程处于LISTEN 状态on Unix(“这个套接字选项告诉内核即使这个端口很忙(处于 TIME_WAIT 状态),仍然继续使用它。如果它很忙,但处于另一个状态,你仍然会得到一个地址已经在使用错误。"),和它不能保证连接会转到正确的套接字 on Windows ("例如,如果同一端口上的所有套接字都提供 TCP 服务,则不能保证任何通过该端口传入的 TCP 连接请求由正确的套接字处理——行为是不确定的").

    【讨论】:

    • 感谢您的详细回复!我希望一种用于真正重定向的方法是可能的,尽管我曾考虑将“DocumentRoot”更改为指向所需服务器的本地 IP 地址作为权宜之计。不过,我只是不确定走这条路是否有任何真正切实的安全优势。
    • @NorthsideP 注意我不是在谈论重定向或更改文档根目录,而是在谈论运行反向代理。这对客户来说是透明的。
    • 抱歉,我并不是故意让这听起来像是把这两个想法等同起来。我将在今晚晚些时候尝试sniproxy 并报告。再次感谢!
    【解决方案2】:

    sniproxy 来自Bruno 的建议就像一个魅力!非常容易安装和配置。

    1. 已安装 Ubuntu Server 14.04 64 位。

    2. 已配置的服务器(升级、ufw 等)。

    3. 已安装 git。

      sudo apt-get install git

    4. 已安装 sniproxy 依赖项。

      sudo apt-get install autotools-dev cdbs debhelper dh-autoreconf dpkg-dev gettext libev-dev libpcre3-dev libudns-dev pkg-config

    5. 已将 sniproxy 0.4.0 git 文件下载到所需文件夹。

      git 克隆https://github.com/dlundquist/sniproxy.git

    6. 内置 Debian 软件包。

      ./autogen.sh && dpkg-buildpackage

    7. 已安装的包。

      sudo dpkg -i ../sniproxy__.deb

    8. 编辑 /etc/sniproxy.conf “http_hosts” 和 “https_hosts” 表以将域指向所需的本地 IP 地址和端口。

    9. 启动 sniproxy。

      用法:sniproxy [-c ] [-f] [-n ] [-V]
      -c 配置文件,默认为 /etc/sniproxy.conf
      -f 在前台运行,不放弃权限
      -n 指定文件描述符限制
      -V 打印 SNIProxy 的版本并退出

    更多说明可以在 sniproxy GitHub 上找到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2011-01-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2017-05-06
      • 2015-10-12
      • 2013-08-01
      相关资源
      最近更新 更多