在两个虚拟主机上使用 SSL

Posted

技术标签:

【中文标题】在两个虚拟主机上使用 SSL【英文标题】:Using SSL on two VirtualHosts 【发布时间】:2013-07-14 17:38:28 【问题描述】:

所以我从 GoDaddy 获得了 SSL。 它适用于我的公共网站mysite.com。 我现在想为我的administrator.mysite.com 建立 SSL 连接 所以我使用 openssl 创建了一个自签名证书,因为我不介意用锁上的红色标记管理我自己的网站。

里面httpd-ssl.conf

<VirtualHost *:443>
   ServerName mysite.com:443
   ServerAlias www.mysite.com

   DocumentRoot /opt/lampp/htdocs/MySite/

   ServerAdmin admin@mysite.com

   ErrorLog /opt/lampp/htdocs/MySite/logfiles/ssl_errors.log
   TransferLog /opt/lampp/htdocs/MySite/logfiles/ssl_access.log

   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /opt/lampp/etc/ssl.crt/mysite.com.crt
   SSLCertificateKeyFile /opt/lampp/etc/ssl.key/server_nopwd.key
   SSLCertificateChainFile /opt/lampp/etc/ssl.crt/gd_bundle.crt

   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /opt/lampp/htdocs/MySite/logfiles/ssl_request_log "%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%r\" %b"
   <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
   </FilesMatch>
   <Directory "/opt/lampp/cgi-bin">
     SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

</VirtualHost>                                  

<VirtualHost *:443>
   ServerName administrator.mysite.com:443
   DocumentRoot "/opt/lampp/htdocs/"

   ServerAdmin admin@mysite.com

   ErrorLog /opt/lampp/htdocs/MySite/logfiles/ssl_errors_admin.log
   TransferLog /opt/lampp/htdocs/MySite/logfiles/ssl_access_admin.log

   SSLEngine on
   SSLProtocol all -SSLv2
   SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

   SSLCertificateFile /opt/lampp/etc/ssl.crt/admin.crt
   SSLCertificateKeyFile /opt/lampp/etc/ssl.key/admin.key

   SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
   CustomLog /opt/lampp/htdocs/MySite/logfiles/ssl_request_log "%t %h %SSL_PROTOCOLx %SSL_CIPHERx \"%r\" %b"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/opt/lampp/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
BrowserMatch ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0

</VirtualHost>      

我收到了这个警告:

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

会发生什么,管理员主机被重定向到普通主机,这很烦人

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。奇怪的是,有些人报告说它对他们来说就像一种魅力,但对其他人却不是。我什至尝试通过 SSLStrictSNIVHostCheck apache 指令使用 SNI,但没有运气。

当使用带有通配符域的 ServerAlias 指令时,例如。 *.snakeoil.com 那么 VirtualHost 配置的顺序很重要。如果 VirtualHost 带有通配符域别名:

ServerAlias *.snakeoil.com

是第一个它将首先处理并避免解析其他虚拟主机。尝试反转虚拟主机,以便这一切都是最后一个,例如。

<IfModule mod_ssl.c>

# first vhost
<VirtualHost *:443>
    ServerName vhost1.snakeoil.com
    [...]
</VirtualHost>

# second vhost
<VirtualHost *:443>
    ServerName vhost2.snakeoil.com
    [...]
</VirtualHost>

# Attention!
# All other vhost requests end up here
# Order matters, keep this entry to be the last one
# as a last resort if any of the above don't apply
<VirtualHost *:443>
    ServerName snakeoil.com
    ServerAlias *.snakeoil.com
    [...]
</VirtualHost>

</IfModule>

至少与 apache 2.2.14

一起为我工作过

【讨论】:

这对我有用,Windows、Apache 2.4、通配符 SSL。谢谢!【参考方案2】:

这对于较新的浏览器应该可以正常工作,尽管可能值得检查您的 htaccess 规则,以防其中一个无意中将 admin.mysite.com 重定向到 mysite.com

您收到的警告消息在此处进行了详细说明:https://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI(基本上旧版浏览器只能查看默认虚拟主机)。

【讨论】:

以上是关于在两个虚拟主机上使用 SSL的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Apache 上设置 2 个虚拟主机,其中一个主机使用 SSL 运行而其他不使用?

禁用默认 443 虚拟主机的 Apache SSL 引擎

没有 SSL 证书设置的虚拟主机重定向到使用 SSL 的其他虚拟主机

nginx实现虚拟主机ssl加密,注意此方法只能在公司内部使用

PHP Wamp 服务器 - 一台服务器上有 2 个 SSL 证书

虚拟主机搭建的网站如何安装SSL证书?