在Apache 2.2.3 / CentOS 5.9上使用SSL的基于名称的虚拟主机

时间:2013-12-09 14:20:22

标签: apache ssl virtualhost

您好我正在尝试为一个有两个子域的网站提供服务,这两个子域都应该在SSL下。我已经购买了通配符SSL证书并安装了它。在我的vhosts文件中,我有5个定义,www(80),app(80/443)和staging(80/443)。所有子域都在端口80下工作。

这是我的vhosts.conf文件的片段:

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
  ServerAdmin support@---
  ServerName app.---
  DocumentRoot /var/www/vhosts/---/app/www/
  ErrorLog /var/www/vhosts/---/app/log/error.log

  <Directory "/var/www/vhosts/---/app/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin support@---
  ServerName app.---
  DocumentRoot /var/www/vhosts/---/app/www/
  ErrorLog /var/www/vhosts/---/app/log/ssl.log

  SSLEngine ON
  SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
  SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt

  <Directory "/var/www/vhosts/---/app/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerAdmin support@---
  ServerName staging.---
  DocumentRoot /var/www/vhosts/---/staging/www/
  ErrorLog /var/www/vhosts/---/staging/log/error.log

  <Directory "/var/www/vhosts/---/staging/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  ServerAdmin support@---
  ServerName staging.---
  DocumentRoot /var/www/vhosts/---/staging/www/
  ErrorLog /var/www/vhosts/---/staging/log/ssl.log

  SSLEngine ON
  SSLCertificateFile /etc/httpd/conf.d/ssl/---/ssl.crt
  SSLCertificateKeyFile /etc/httpd/conf.d/ssl/---/ssl.key
  SSLCertificateChainFile /etc/httpd/conf.d/ssl/---/intermediate.crt

  <Directory "/var/www/vhosts/---/staging/www">
    Options Indexes FollowSymLinks
    AllowOverride All
  </Directory>
</VirtualHost>

如果我更改此行:

<VirtualHost *:443>

要:

<VirtualHost SERVER_IPADDRESS:443>

第一个定义将按预期工作并使用正确的证书。当我重新启动Apache时,我在终端收到一条消息,说明有重复的条目,只会使用第一条。

使用上面的conf我终端没有收到任何错误或警告,但我在Apache的日志中看到过:

[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!

从我在网上看到的情况来看,警告是预期的,不应该是一个问题。

运行configtest显示语法OK。

似乎问题是使用SSL命名为虚拟主机。我已经在线检查了3个指南并尝试了各种各样的事情(使用* .domain.com作为ServerName,两者,app.domain.com作为ServerAlias),子域名作为指令(app.domain.com:443)但是可以' t找出正确的组合,只使用一个IP地址为80和443下的每个子域服务。

我知道这是可能的。关于我缺少的任何想法?

2 个答案:

答案 0 :(得分:1)

检查您正在使用的apache版本。可能是你的apache太旧而无法支持它。我认为在apache 2.2.12及更高版本中支持sni。

答案 1 :(得分:0)

我能找到的唯一一个不是很好的解决方案就是在CentOS 6.4上重建。 Russ指出的问题是内置的Apache / OpenSSL不支持SNI。我设法在5.9中升级了OpenSSL,但我无法使用SNI构建Apache。我使用指南编译它,显示要使用的标志,但它没有工作。这并不是说它无法完成,我可能做错了,这更容易,因为它适用于新网站,停机时间不是问题。

问题得到纠正后,error_log中的警告会更改为:

[warn] Init: Name-based SSL virtual hosts only work for clients with TLS server name indication support (RFC 4366)

感谢您的帮助!