使用SSL的Apache名称虚拟主机
我正在尝试设置我们的服务器以允许通过SSL的stream量。 我知道SSL不适用于名称虚拟主机,但是我们在具有专用私有IP的虚拟机上拥有所有的apache服务器。 我们有一个主要的虚拟机,它具有mod_proxy设置将stream量路由到适当的vms。
但是,为了路由httpsstream量,我们需要在代理上安装证书以及vms。 我们有一个可以在所有主机上使用的通配符证书。 一切似乎正常工作,但我在代理的apache日志中收到以下内容:
[警告] Init:SSL服务器IP /端口冲突:host1.domain.com:443(/ etc / apache2 / sites-enabled / host1:1)与host2.domain.com:443(/ etc / apache2 / sites-启用/主机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>
有什么办法可以让这个工作吗?
这听起来像Apache警告你,你有多个具有相同的IP地址和端口的<VirtualHost>
部分…只要得到它没有任何警告的工作,我想你需要使用像服务器名称指示(SNI) ,这是一种标识所请求的主机名作为SSL握手的一部分的方式。 基本上它可以让你通过SSL进行基于名称的虚拟主机,但我不确定浏览器支持多好。 除了像SNI这样的东西外,基本上只限于你公开互联网上的每个IP地址使用一个SSL的域名。
当然,如果你能够正确地访问网站,你可能会很好的忽略警告。 这些特殊的不是很严重 – 如果遇到问题,它们主要指示要看什么
据我所知,Apache从版本2.2.12开始支持SNI。遗憾的是文档还没有反映出这种变化。
去http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI,直到完成;
您可以replace:
VirtualHost ipaddress:443
同
VirtualHost *:443
你可能需要在你所有的虚拟主机上都这样做。
它可能会清除那个消息。 让ServerName指令担心路由消息请求。
再一次,如果你有多个ip的别名到同一台机器,你可能无法做到这一点。
Apache不支持基于名称的虚拟主机上的SSL,仅在基于IP的虚拟主机上。
来源:Apache 2.2 SSL常见问题为什么不能使用基于名称的虚拟主机来识别不同的SSL虚拟主机?
与SSL不同,TLS规范允许使用基于名称的主机(其他人提到的SNI),但Apache尚不支持此function。 它应该会在将来的版本中编译openssl 0.9.8。
另外, mod_gnutls声称支持SNI,但我从来没有真正尝试过。
首先你需要在你的configuration文件中使用NameVirtualHost ip:443! 你可能有一个最后80,但你也将需要443。
其次你需要一个*。域名证书(通配符)(可以做一个)
第三,你只能做一些ip.domain网站(因为证书)
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>