apache - 是否可以在 1 个 IP 地址上运行 2 个具有单独 SSL 证书的服务器?

标签 apache ssl sni

我有两个域在不同的本地服务器上运行,每个域都有自己的 SSL 证书。在过去,这需要两个公共(public) 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 证书吗?
预先感谢您提出任何建议。

最佳答案

既然您乐于使用 SNI,您的问题就不是在同一个 IP 地址(和端口)上使用两个证书,而是让两个服务器同时绑定(bind)到同一个 IP 地址和端口时间。

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

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

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

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

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


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

关于apache - 是否可以在 1 个 IP 地址上运行 2 个具有单独 SSL 证书的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30107442/

相关文章:

php - 找不到 Wordpress 错误 404

c# - 在 asp.net Mvc 中将 HTTP POST 请求重定向到 HTTPS POST 请求

c# - 在 AuthenticateAsServer 之前阅读 ClientHello

ssl - curl:如何为 https 请求指定目标主机名

regex - 301/302 从斜杠根重定向到特定主页 url

html、css文件apache权限

codeigniter - nginx ssl 不工作 - 404 找不到文件

c - axis2c SSL 客户端身份验证

wordpress - 基于浏览器 SNI 支持的重定向

linux - 配置 Apache Tomcat 以运行 PHP