Firefox y Chrome siguen forzando la aplicación HTTPS on Rails usando nginx / Passenger

Pregunta:

Tengo un problema realmente extraño aquí donde cada vez que intento navegar por mi aplicación Rails en modo no SSL, Chrome (v16) y Firefox (v7) sigue forzando a que mi sitio web sea servido en HTTPS.

La aplicación My Rails se implementa en un VPS de Ubuntu usando Capistrano, nginx, Passenger y un certificado SSL comodín.

He configurado estos parámetros para el puerto 80 en nginx.conf:

            passenger_set_cgi_param HTTP_X_FORWARDED_PROTO http;
            passenger_set_cgi_param HTTPS off;

La versión larga de mi nginx.conf se puede encontrar aquí: https://gist.github.com/2eab42666c609b015bff

El archivo ssl-redirect.include contiene:

rewrite ^/sign_up https://$host$request_uri? permanent ;
rewrite ^/login https://$host$request_uri? permanent ;
rewrite ^/settings/password https://$host$request_uri? permanent ;

Es para asegurarse de que esas tres páginas usen HTTPS cuando provienen de una solicitud que no es SSL.

Mi archivo production.rb contiene esta línea:

  # Enable HTTP and HTTPS in parallel
  config.middleware.insert_before Rack::Lock, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }

Intenté redirigir a HTTP a través de reescrituras de nginx, redirecciones de Ruby on Rails y también usé la URL de vista de Rails usando el protocolo HTTP.

Mi archivo application.rb contiene estos métodos utilizados en un gancho before_filter:

def force_http
 if Rails.env.production?
   if request.ssl?
     redirect_to :protocol => 'http', :status => :moved_permanently
   end
 end
end

Cada vez que intento redirigir a HTTP no SSL, el navegador intenta redirigirlo de nuevo a HTTPS, lo que provoca un bucle de redireccionamiento infinito. Safari, sin embargo, funciona bien. Incluso cuando deshabilité el servicio SSL en nginx, los navegadores aún intentan conectarse al sitio mediante HTTPS. También debo mencionar que cuando envié mi aplicación a Heroku, la redirección de Rails funciona bien para todos los navegadores.

La razón por la que quiero usar no SSL es que mi página de inicio contiene objetos incrustados dinámicos no seguros y una CDN no segura y quiero evitar advertencias de seguridad.

No sé qué está causando que el navegador siga forzando solicitudes HTTPS.

Respuesta:

Si usó config.force_ssl = true en la configuración de su entorno y luego lo apagó, es posible que su navegador solo realice conexiones a través de ssl.

Rails envía un encabezado HSTS cuando force_ssl es verdadero, lo que hará que algunos navegadores solo permitan conexiones a través de HTTPS al dominio en cuestión, independientemente de lo que se ingrese en la barra de direcciones. El navegador almacenará en caché esta configuración durante 1 año de forma predeterminada.

Vea algunos consejos sobre cómo evitar esto en este artículo de blog: http://www.simonecarletti.com/blog/2011/05/configuring-rails-3-https-ssl/#comment-40447

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım