apache:同一台计算机和同一 IP 上的多个 SSL vhost

apache:同一台计算机和同一 IP 上的多个 SSL vhost

我有一台装有 Gentoo Linux 64 位的 Linux 服务器。

我安装了 Apache 2.2.17,并在其上配置了几个正常工作的虚拟主机。当我尝试添加 SSL 虚拟主机时,apache 仅检测到第一个。

每个虚拟主机的配置方式如下:

<VirtualHost *:443>
    ServerName myserver
    serverAlias [server name].tux-in.com
    Include /etc/apache2/vhosts.d/magento_vhost.include
    ErrorLog /var/log/apache2/[server]_ssl_error_log

    <IfModule log_config_module>
            TransferLog /var/log/apache2/[server]_ssl_access_log
    </IfModule>

    SSLEngine on

    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

    SSLCertificateFile /etc/ssl/apache2/server.crt

    SSLCertificateKeyFile /etc/ssl/apache2/server.key

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>

    <Directory "/var/www/localhost/cgi-bin">
            SSLOptions +StdEnvVars
    </Directory>

    <IfModule setenvif_module>
            BrowserMatch ".*MSIE.*" \
                    nokeepalive ssl-unclean-shutdown \
                    downgrade-1.0 force-response-1.0
    </IfModule>

    <IfModule log_config_module>
            CustomLog /var/log/apache2/ssl_request_log \
                    "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
    </IfModule>
</VirtualHost>

这是包含文件:

ServerAdmin [email protected]

DocumentRoot "/var/www/[server dir]"

<Directory "/var/www/[server dir]">
    Options Indexes FollowSymLinks


    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

在以下网址中http://wiki.apache.org/httpd/NameBasedSSLVHosts 我读到关于 ssl 虚拟主机 apache 将只获取第一个 ssl vhost 配置。

我有一台 Linux 服务器,其中有几十个域名转发到我的 IP,每个域名都有自己的有效 SSL 证书。我该如何配置我的系统以允许这样做?我真的需要分配我的 IP 地址来解决这个问题吗?

谢谢!

答案1

Apache 将“检测”并在 SSL 端口上为任意数量的 vhost 提供服务。具体来说,问题在于使用哪个证书。

考虑一下如何选择虚拟主机;客户端将Host:标头作为其发送的请求的一部分进行传输。在将信息发送到服务器时,SSL 隧道已经建立,因此 Apache 不可能在选择证书时根据它不知道的内容来选择证书。在这种情况下,它始终选择要加载的第一个虚拟主机上的证书。

但是,当客户端和服务器都支持 TLS 服务器名称指示时,客户端可以在会话协商中指示要访问哪个主机名,从而允许 Apache 使用正确的证书。您的服务器应该支持它(只要您的 OpenSSL 库足够新,但 Apache 2.2.17 也可以),所以这是一个客户端支持的问题。

如果您的客户端仍在使用 Windows XP,那么就不行;如果您的网站共享父域,那么您最好的选择是使用通配符证书,如果没有,那么您最好的选择是使用主题备用名称证书。

答案2

考虑一下 Apache 所做的事情:

它与给定的 IP 和端口号建立新连接,并且必须设置 SSL 连接;为此,它需要 SSL 证书。它应该如何在多个证书之间进行选择?

因此,每个 IP/端口组合只能使用一个 SSL 证书。如果您还想使用默认的 https 端口,那么每个 IP 就只能使用一个证书。

答案3

在我的配置中,我有多个<VirtualHost *:443>ServerName站点地址不同的匹配部分。

对于每个,都有一个 SSL 配置部分,其中包含证书等...

对于较新的浏览器,它应该可以工作。(在 Win XP 上,由于加密库无法处理多个 SSL 主机请求,因此它无法工作)

如果您的 ssl 和 apache 包足够新,它应该可以工作。

有关的:旧金山您将在其中看到有关 SNI(服务器名称指示)的配置和信息示例

相关内容