Apache / Mongrel / Rails提供两个SSL证书?

当涉及到Mongrel和Rails时,Apache(2.0)可以提供两个SSL证书吗?

这是情况…我有一个服务器上有两个网站:foo.com和bar.com。 两者都有自签名的SSL证书(来自GoDaddy),都有自己的IP地址。 以下是相关的Apacheconfiguration设置:

<VirtualHost 192.168.100.17:443> ServerName secure.foo.com DocumentRoot /var/www/client/foo/current ProxyPass / http://127.0.0.1:3002/ ProxyPassReverse / http://127.0.0.1:3002/ ProxyPreserveHost on RequestHeader set X_FORWARDED_PROTO 'https' SSLEngine on SSLCertificateFile /etc/httpd/conf/ssl.crt/secure.foo.com.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/secure.foo.com.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/gd_intermediate_bundle.crt SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP ErrorLog /var/www/client/foo/current/log/ssl_error_log TransferLog /var/www/client/foo/current/log/ssl_access_log LogLevel warn <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> RewriteEngine On SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> <VirtualHost 192.168.100.16:443> ServerName secure.bar.com DocumentRoot /var/www/sites/bar/secure ProxyPass / http://127.0.0.1:3003/ ProxyPassReverse / http://127.0.0.1:3003/ ProxyPreserveHost on RequestHeader set X_FORWARDED_PROTO 'https' SSLEngine on SSLCertificateFile /etc/httpd/conf/ssl.crt/secure.bar.com.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/secure.bar.com.key SSLCertificateChainFile /etc/httpd/conf/ssl.crt/gd_intermediate_bundle.crt SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP ErrorLog /var/log/httpd/bar.com/ssl_error_log TransferLog /var/log/httpd/bar.com/ssl_access_log LogLevel warn <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost> 

如果我转到secure.foo.com上的一个应该是安全的页面(例如https://secure.foo.com/login ),我会收到一条警告,说明该证书是用于secure.BAR.com的。 但是,如果我查看证书是secure.FOO.com。

这只发生在Firefox。 在MSIE中没有警告。

我的理论是,Apache正在提供正确的证书(对于secure.foo.com),但不知何故secure.bar.com的证书也被发送。 (我假设MSIE不会抛出错误,因为它简单地忽略了第二个错误。)

我想责怪Mongrel的情况,但是Mongrel不会“做”SSL。 我也想把它归咎于Rails,但Rails所做的一切就是检查页面是否应该被encryption,如果不是,只是将其redirect到一个安全的连接。

有没有人见过这样的事情? 任何想法可能是什么问题?

更新:当然,在Apacheconfiguration中注释掉以下几行,会导致正确的SSL“握手”:

 ProxyPass / http://127.0.0.1:3002/ ProxyPassReverse / http://127.0.0.1:3002/ ProxyPreserveHost on 

这很尴尬…

这个问题是由页面上一个形成不良的favicon链接造成的。 我们链接到https://foo.com/images/favicon.ico ,而不是https:// secure .foo.com / images / favicon.ico。

据我了解,这个问题并没有影响MSIE,因为MSIE忽略了通过SSL的favicon链接。