我正在尝试设置我们的服务器以允许通过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>
有什么方法可以让它发挥作用吗?
答案 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