Назад | Перейти на главную страницу

Apache / Mongrel / Rails обслуживает два сертификата SSL?

Может ли 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.