我正在尝试设置我们的服务器以允许通过SSL进行流量 . 我知道SSL不适用于Name Virtual Host,但是我们在具有专用私有IP的虚拟机上拥有所有apache服务器 . 我们有一个主虚拟机,它具有mod_proxy设置,可以将流量路由到适当的vms .
但是,为了路由https流量,我们需要在代理和vms上安装证书 . 我们有一个可以在所有主机上使用的通配符证书 . 一切似乎都正常工作,但我在代理的apache日志中收到以下内容:
[警告]初始化: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>
有什么方法可以让这个工作吗?
7 回答
听起来Apache警告你有多个具有相同IP地址和端口的
<VirtualHost>
部分......只要让它在没有警告的情况下工作,我想你需要使用像服务器名称指示(SNI)这样的东西,识别作为SSL握手一部分请求的主机名的方法 . 基本上,它允许您通过SSL进行基于名称的虚拟主机,但我支持浏览器 . 除了像SNI这样的东西,你基本上只限于一个支持SSL的域名,用于你公开上网的每个IP地址 .当然,如果您能够正确访问网站,您可能会忽略警告 . 这些特别的不是很严重 - 它们主要表明如果遇到问题需要注意什么
据我所知,自2.2.12版以来,Apache支持SNI . 遗憾的是,文档尚未反映出这种变化 .
转到http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI直到完成
您可能可以替换:
同
您可能需要在所有virt主机上执行此操作 .
它可能会清除这条消息 . 让ServerName指令担心路由消息请求 .
同样,如果您在同一台计算机上有多个ip别名,则可能无法执行此操作 .
VirtualHost看起来像这样:
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,但我从未尝试过 .
首先,你需要在配置文件中使用NameVirtualHost ip:443!你可能最后有一个80,但你也需要一个443 .
其次你需要* .domain证书(通配符)(可以制作一个)
第三,你只能在一个ip中创建something.domain web(因为证书)
您必须添加以下部分以启用给定IP的
NameVirtualHost
功能 .