具有 SSL 证书的 Apache 多个虚拟主机

具有 SSL 证书的 Apache 多个虚拟主机

可能重复:
同一 IP 地址和同一端口上有多个 SSL 域吗?

我在使用 Apache 和多个 SSL 证书时遇到了问题。如果我只为一个域配置它,一切都会正常工作,但是当我将另一个域添加为虚拟主机时,它会返回错误:

VirtualHost domain1.cz:443 overlaps with VirtualHost domain2.sk:443, the first has precedence, perhaps you need a NameVirtualHost directive
    [Wed Nov 07 16:14:49 2012] [warn] NameVirtualHost *:443 has no VirtualHosts

我尝试了许多虚拟主机配置方法的组合,但结果仍然非常相似 - 第一个域名得到正确保护,第二个域名(domain2.sk)从第一个域名接收证书。

请问,您能帮我完成这种证书配置吗?

NameVirtualHost *:443

<VirtualHost domain1.cz:443>
   ServerName domain1.cz
   DocumentRoot /var/www/www.domain1.cz/htdocs/

   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /etc/apache2/ssl/domain1.cz/ssl.crt
   SSLCertificateKeyFile /etc/apache2/ssl/domain1.cz/ssl.key
   SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
   SSLCACertificateFile /etc/apache2/ssl/ca.pem

   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /var/www/www.domain1.cz/logs/ssl-access.log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

   LogLevel warn
   ErrorLog /var/www/www.domain1.cz/logs/ssl-error.log
</VirtualHost>

<VirtualHost domain2.sk:443>
   ServerName domain2.sk
   DocumentRoot /var/www/www.domain2.sk/htdocs/

   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /etc/apache2/ssl/domain2.sk/ssl.crt
   SSLCertificateKeyFile /etc/apache2/ssl/domain2.sk/ssl.key
   SSLCertificateChainFile /etc/apache2/ssl/sub.class1.server.ca.pem
   SSLCACertificateFile /etc/apache2/ssl/ca.pem

   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /var/www/www.domain2.sk/logs/ssl-access.log \
      "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

   LogLevel warn
   ErrorLog /var/www/www.domain2.sk/logs/ssl-error.log
</VirtualHost>

答案1

每个 IP 地址/端口只能提供一个 SSL 证书。为了使多个 SSL 正常工作,您要么需要另一个 IP 地址(推荐),要么将第二个 SSL 证书绑定到您 IP 上的另一个端口(可行,但对您的网站访问者来说很麻烦,因为端口必须包含在 URL 中)。请咨询您的主机,他们中的大多数都以实惠的价格提供额外的 IP。

此主题有更多信息。

编辑:我不会语法。

答案2

您发布的配置应该是正确的,但是<VirtualHost *:443>在两种情况下都必须使用 和 ,而不是<VirtualHost domain1.cz:443><VirtualHost domain2.sk:443>

您的指定domain1.czdomain2.sk指令都是正确的ServerName

请注意,这将使用名为“服务器名称指示”的功能。您必须运行足够新的 Apache 和 OpenSSL 库,并且它不适用于较旧的浏览器。阅读更多这里关于 SNI。

相关内容