0

我需要有关 Apache2 配置的帮助。

我在此服务器上托管了一些不是 SSL 的站点和一个是 SSL 的站点。问题是,输入服务器上托管的任何站点的 https:// 都会导致 SSL 托管站点出现证书错误。

如何阻止该网站显示?

 <IfModule mod_ssl.c>
 NameVirtualHost *:443
 <VirtualHost *:443>
    ServerAdmin miked@********.ca
    ServerName www.********.com
  CheckSpelling on
  CheckCaseOnly on


    DocumentRoot /var/vhosts/********.com
    <Directory />
            Options FollowSymLinks
            AllowOverride All


    </Directory>
    <Directory /var/vhosts/*******.com>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
    </Directory>

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined


    LogLevel error

    CustomLog ${APACHE_LOG_DIR}/*******-ssl_access.log combined env=!chat
    ErrorLog ${APACHE_LOG_DIR}/*******-ssl-error.log


    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on

    #SSLCertificateFile    /etc/apache2/ssl/apache.crt


    SSLCertificateFile      /etc/apache2/ssl/lubrigard.crt
    SSLCertificateKeyFile   /etc/apache2/ssl/apache.key
    SSLCertificateChainFile /etc/apache2/ssl/digicertCA.crt

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>

    BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
    # MSIE 7 and newer should be able to use keepalive
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

 </VirtualHost>
 </IfModule>
4

1 回答 1

2

9 个月太晚了,我知道,而且我绝不是 apache 配置专家,但是-

我认为这个问题的真正解决方案是为您的服务器分配一个额外的 IP 地址,并让 SSL 虚拟主机只监听该 IP 地址。

因为,至少在常规应用程序中(也就是说,如果您不准备使用 IE 7 或 8 使用服务器名称指示来避开 Windows XP 及以下用户,请参阅此处此处)每个 SSL 证书都需要一个单独的 IP 地址,因为握手发生在主机名被传递之前,因此客户端只提供IP地址,没有其他干净的方法可以解决这个问题,因为主机名不匹配将发生在可以在vhost条目中处理其他任何内容时, 并且访问者可以看到 SSL 证书实际上对哪个域名有效。

但是,一旦人们单击“同意”或“添加例外”以通过警告,您可以将这样的块添加到您的 SSL 虚拟主机,以将人们重定向到适当的域。仅针对域名本身进行了测试,而不针对其中的页面或目录进行了测试。(部分取自此处给出的第一个示例)

 <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteCond %{HTTP_HOST}   !^(www\.)?********\.com [NC]
      RewriteCond %{HTTP_HOST}   !^$
      RewriteCond %{HTTP_HOST}   ^(.*)$
      RewriteRule ^/(.*)         http://%1/$1 [L,R]
  </IfModule>

...其中星号代表您的具有ssl的域名。这应该将所有其他请求重写为它们的 HTTP 等效项,同时保持对 ssl 域的请求保持不变。

如果您无法获得另一个 IP 地址,并且取决于您的访问者,也许 SNI 是您的最佳选择。

也许 Serverfault 的人会知道更多?

于 2014-01-27T15:46:23.140 回答