Может ли Apache (2.0) обслуживать два сертификата SSL, когда задействованы Mongrel и Rails?
Вот такая ситуация ... У меня есть сервер с двумя сайтами: foo.com и bar.com. Оба имеют самозаверяющие SSL-сертификаты (от GoDaddy) и оба имеют собственный IP-адрес. Вот соответствующие настройки конфигурации Apache:
<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, это проверяет, должна ли страница быть зашифрованной, а если нет, просто перенаправляет ее на безопасное соединение.
Кто-нибудь видел что-нибудь подобное раньше? Есть идеи, в чем может быть проблема?
ОБНОВЛЕНИЕ: комментирование следующих строк в конфигурации Apache, конечно, отключает сайт, но приводит к правильному "рукопожатию" SSL:
ProxyPass / http://127.0.0.1:3002/
ProxyPassReverse / http://127.0.0.1:3002/
ProxyPreserveHost on
Это раздражительно...
Проблема была вызвана неправильно сформированной ссылкой на значок на страницах. Мы ссылались на https://foo.com/images/favicon.ico когда вместо этого должен быть https: //безопасный.foo.com / images / favicon.ico.
Насколько я понимаю, проблема не затрагивала MSIE, потому что MSIE игнорирует ссылки на фавиконы через SSL.