40

我正在尝试设置我们的服务器以允许通过 SSL 进行流量。我知道 SSL 不适用于 Name Virtual Host,但我们所有的 apache 服务器都位于具有专用私有 IP 的虚拟机上。我们有一个主虚拟机,它设置了 mod_proxy 来将流量路由到适当的虚拟机。

但是,为了路由 https 流量,我们需要在代理和 vms 上安装证书。我们有一个通配符证书,可以在我们所有的主机上使用。一切似乎都正常工作,但我在代理的 apache 日志中收到以下内容:

[警告] 初始化:SSL 服务器 IP/端口冲突:host1.domain.com:443 (/etc/apache2/sites-enabled/host1:1) 与 host2.domain.com:443 (/etc/apache2/sites-启用/host2:1)

我们在代理上设置的每个主机都有这些错误消息之一。我们的代理虚拟主机设置如下:

<VirtualHost ipaddress:443>
    ServerName host1.domain.com
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / https://privateip:443/
    ProxyPassReverse / https://privateip:443/

    SSLProxyEngine on
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/server.crt
    SSLCertificateKeyFile /etc/ssl/private/server.key
</VirtualHost>

有什么办法可以让它工作吗?

4

7 回答 7

21

听起来 Apache 警告你有多个<VirtualHost>部分具有相同的 IP 地址和端口......至于让它在没有警告的情况下工作,我认为你需要使用类似服务器名称指示 (SNI) 的东西,一种方式识别作为 SSL 握手的一部分请求的主机名。基本上,它允许您通过 SSL 进行基于名称的虚拟主机,但我不确定浏览器对它的支持程度。除了 SNI 之类的东西之外,对于公开给公共互联网的每个 IP 地址,您基本上只能使用一个启用 SSL 的域名。

当然,如果您能够正确访问这些网站,您可能会很好地忽略这些警告。这些特殊的不是很严重-它们主要是指示您遇到问题时应该查看的内容

于 2009-02-05T20:42:27.730 回答
7

据我所知,Apache 从 2.2.12 版开始支持 SNI 遗憾的是,文档还没有反映这种变化。

http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI直到完成

于 2010-02-15T09:16:41.283 回答
3

您也许可以更换:

VirtualHost ipaddress:443

VirtualHost *:443

您可能需要在所有 virt 主机上执行此操作。

它可能会清除该消息。让 ServerName 指令担心路由消息请求。

同样,如果您对同一台机器有多个 ip 的别名,您可能无法执行此操作。

于 2009-02-05T22:29:30.227 回答
2

VirtualHost 看起来像这样:

NameVirtualHost IP_Address:443

<VirtualHost IP_Address:443>
    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/ca.crt    # Where "ca" is the name of the Certificate
    SSLCertificateKeyFile /etc/pki/tls/private/ca.key
    ServerAdmin webmaster@domain_name.com
    DocumentRoot /var/www/html
    ServerName www.domain_name.com
    ErrorLog logs/www.domain_name.com-error_log
    CustomLog logs/www.domain_name.com-access_log common
</VirtualHost>
于 2016-12-21T10:30:38.653 回答
1

Apache 不支持基于名称的虚拟主机上的 SSL,仅支持基于 IP 的虚拟主机。

来源:Apache 2.2 SSL FAQ question为什么不能使用基于名称的虚拟主机来识别不同的 SSL 虚拟主机?

与 SSL 不同,TLS 规范允许基于名称的主机(其他人提到的 SNI),但 Apache 尚不支持此功能。当针对 openssl 0.9.8 编译时,它应该会在未来的版本中。

此外,mod_gnutls声称支持 SNI,但我从未真正尝试过。

于 2009-02-12T17:31:43.817 回答
1

首先你需要 NameVirtualHost ip:443 在你的配置文件中!最后你可能有一个 80 的,但你也需要一个 443 的。

其次,您需要一个 *.domain 证书(通配符)(可以制作一个)

第三,您只能在一个 ip 中创建 something.domain 网站(因为证书)

于 2011-10-01T19:14:24.953 回答
1

您必须添加以下部分以启用NameVirtualHost具有给定 IP 的功能。

NameVirtualHost IP_Address:443
于 2018-07-26T06:26:55.587 回答