É possível que o Apache (2.0) forneça dois certificados SSL quando o Mongrel e o Rails estão envolvidos?
Aqui está a situação ... Eu tenho um servidor com dois sites: foo.com e bar.com. Ambos possuem certificados SSL autoassinados (da GoDaddy) e ambos possuem seu próprio endereço IP. Aqui estão as configurações de configuração relevantes do 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>
Se eu for a uma página em secure.foo.com que deve ser segura (por exemplo, link ), recebo um aviso que o certificado é para secure.BAR.com. Mas se eu ver o certificado é para secure.FOO.com.
Isso está acontecendo apenas no Firefox. Nenhum aviso no MSIE.
Minha teoria é que o Apache está oferecendo o certificado correto (para secure.foo.com), mas de alguma forma o certificado para secure.bar.com também é enviado. (Eu estou supondo que o MSIE não lança um erro porque simplesmente ignora o segundo.)
Eu gostaria de culpar a situação do Mongrel, mas o Mongrel não "faz" SSL. Eu também gostaria de culpá-lo no Rails, mas tudo que o Rails faz é verificar se uma página deve ser criptografada e se não for, apenas redirecione-a para uma conexão segura.
Alguém viu algo assim antes? Alguma idéia de qual seria o problema?
ATUALIZAÇÃO: Comentar as linhas a seguir na configuração do Apache desativa o site, é claro, mas resulta em um "handshake" SSL correto:
ProxyPass / http://127.0.0.1:3002/
ProxyPassReverse / http://127.0.0.1:3002/
ProxyPreserveHost on