带有SSL的Apache名称虚拟主机

时间:2009-02-05 18:50:22

标签: apache ssl ssl-certificate

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

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

[warn] Init:SSL服务器IP /端口冲突:host1.domain.com:443(/ etc / apache2 / sites-enabled / host1:1)与host2.domain.com:443(/ etc / apache2 /网站启用/主机2: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>

有什么方法可以让它发挥作用吗?

7 个答案:

答案 0 :(得分:21)

听起来Apache警告你有多个<VirtualHost>部分具有相同的IP地址和端口......只要让它在没有警告的情况下工作,我认为你需要使用像Server这样的东西名称指示(SNI),一种识别作为SSL握手一部分请求的主机名的方法。基本上它允许你通过SSL进行基于名称的虚拟主机,但我不确定浏览器是否支持它。除了像SNI这样的东西,你基本上只限于一个支持SSL的域名,用于你公开上网的每个IP地址。

当然,如果您能够正确访问网站,那么忽略警告可能会很好。这些特别的不是很严重 - 它们主要表明如果遇到问题需要注意什么

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

您可以替换:

VirtualHost ipaddress:443

VirtualHost *:443

您可能需要在所有virt主机上使用此功能。

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

同样,如果您在同一台计算机上有多个ip别名,则可能无法执行此操作。

答案 3 :(得分: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>

答案 4 :(得分:1)

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

来源:Apache 2.2 SSL常见问题解答Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?

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

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

答案 5 :(得分:1)

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

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

第三,你只能在一个ip中生成某个域。(因为证书)

答案 6 :(得分:0)

必须添加以下部分才能使用给定IP启用NameVirtualHost功能。

NameVirtualHost IP_Address:443