apache:同一台计算机上有多个ssl虚拟主机,IP地址相同

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

我有Apache 2.2.17安装,我有几个虚拟主机上configuration的工作正常。 当我尝试添加SSL虚拟主机时,apache只能检测到第一个虚拟主机。

这是每个虚拟主机的configuration方式:

<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> 

在下面的urlhttp://wiki.apache.org/httpd/NameBasedSSLVHosts我读到,有关SSL虚拟主机Apache将只提取第一个SSL主机configuration。

我有一个Linux服务器,有几十个域转发到我的IP,每个都有它自己的vaild SSL证书。 我怎样才能configuration我的系统允许? 我真的需要分配我的IP地址来解决这个问题吗?

谢谢!

Apache将“检测”并在SSL端口上提供任意数量的虚拟主机。 问题是,特别是使用哪个证书。

想想如何select虚拟主机; 客户端发送一个Host:头作为它发送的请求的一部分。 当信息发送到服务器时,SSL隧道已经build立,所以Apache不可能根据select证书时不知道的内容来select证书。 在这种情况下,它总是select加载第一个虚拟主机上的证书。

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

如果你的客户仍然在Windows XP上,那么这是不可能的。 如果您的网站共享父域,则最佳选项是通配符证书,如果不是,则为主题替代名称证书。

考虑一下Apache的function:

它得到一个新的连接到一个给定的IP和端口号,它必须build立一个SSL连接; 为此,它需要一个SSL证书。 它应该如何在多个证书之间进行select?

所以每个IP /端口组合只能使用一个SSL证书。 而且,如果您还想使用默认的https端口,那么这是每个IP一个证书。

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

对于每个你有一个SSLconfiguration部分,证书等…

对于最近的浏览器,它应该工作。 (在win XP上,由于不处理多个SSL主机请求的encryption库,它不能工作)

如果你的SSL和Apache的包是最近的,它应该工作。

相关: SF你会在SNI上看到configuration和信息的例子(服务器名称指示)