【问题标题】:Name based virtual hosts with SSL on Apache 2.2.3/CentOS 5.9在 Apache 2.2.3/CentOS 5.9 上使用 SSL 的基于名称的虚拟主机
【发布时间】:2013-12-26 16:40:55
【问题描述】:

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

这是我的 vhosts.conf 文件的 sn-p:

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 显示语法正常。

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

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

【问题讨论】:

    标签: apache ssl virtualhost


    【解决方案1】:

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

    【讨论】:

    • 更新了我的帖子,httpd -v 显示 Apache/2.2.23 (Unix)。 SNI 是默认包含还是我必须自己安装?
    • 不确定 centos 5.9。我唯一一次使用 SNI 时,我从新的 2.4 版本编译了我自己的 apache。它还需要最低版本的 openssl 才能正常工作,因此这可能是另一件需要检查的事情。
    • 如果您只有一个通配符证书,则不需要 SNI 工作。如果您有 2 个或更多证书,则 SNI 用于选择正确的证书以返回给客户端。
    • 这是一个好点。 :) 该消息刚刚在我的大脑中触发了 SNI,我没想过只提供一个证书。
    • @wollybrain 我即将在 CentOS6 上重建,因为我无法在 5.9 上安装更新版本的 OpenSSL/Apache。在我做之前有什么建议吗?
    【解决方案2】:

    我能找到的唯一一个不是很好的解决方案是在 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)
    

    感谢您的帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 2012-01-22
      • 2013-12-13
      • 1970-01-01
      • 2016-04-24
      • 2014-09-23
      • 2014-06-11
      • 2013-07-21
      相关资源
      最近更新 更多