2012-05-04 21 views
6

Hay una buena opción de configuración para la aplicación Rails:Rieles: activación del soporte de SSL se confunde Chrome

config.force_ssl = true

Sin embargo parece que acaba de poner eso a cierto no recibe la Conexiones HTTPS funcionando. Aún más: después de intentar (y fallar) conectar con https://localhost:3000 con Chrome, configuré esta opción como falsa, y Chrome aún intenta abrir https, incluso si escribo http.

Así, un par de preguntas:

--¿Cómo para forzar Chrome no intentar https más? - ¿Cuál es la forma correcta de habilitar SSL en mi aplicación Rails?

Actualización: la aplicación se ejecuta en Heroku, y parece que https es compatible allí automágicamente. ¿Puedo probar SSL también localmente? Al igual que cuando se ejecuta el servidor de rieles?

+0

¿Qué servidor web usas>? ¡Rails es middleware! ¿Cómo está configurado ese servidor? –

+1

¿Su servidor configuró los encabezados [Strict Transport Security] (http://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) en algún momento (que Chrome habría recordado)? – Bruno

Respuesta

5

En primer lugar, debo decir que no he probado esto, pero hay principalmente dos razones posiblemente para Chrome sigue utilizando HTTPS:

  • Uso HTTP Strict Transport Security encabezados: si el servidor de ellas fija, el cliente (compatible con HSTS, como Chrome) está destinado a cumplir con HTTPS para todas las solicitudes posteriores a ese host.

  • Redireccionamientos permanentes. Si el redireccionamiento inicial que recibió era usar "301 Moved Permanently" (y no 302 por ejemplo) para hacer la redirección, (*), el navegador debe recordarlo ("Al recurso solicitado se le ha asignado un nuevo URI permanente y cualquier referencia futura a este recurso DEBERÍA usar uno de los URI devueltos ").

Una posible solución a esto sería borrar el caché en su navegador.

(*) This question parece indicar que este es el caso de Ruby on Rails con esta configuración).

+0

[Esta respuesta] (http://stackoverflow.com/a/10523187/372643) debería ser de interés. – Bruno

+1

borrar el caché funcionó para mí. Debo agregar que puede entrar en Inspector (Herramientas de desarrollo) en Chrome, y en la configuración (haga clic en el ícono de ajustes) y marque "Desactivar caché (mientras DevTools está abierto)". Luego visite el sitio como http: // ..., luego cierre DevTools, y usted debería estar en el negocio. Esto evita tener que hacer un borrado total de la memoria caché (si no lo desea) –

+0

Los iconos han cambiado ahora en chrome, al menos en mi versión para Mac OS. Todavía es fácil, solo golpea la hamburguesa en la esquina superior derecha, ve el historial (o ejecuta Y para ver el historial completo) luego presiona "borrar datos de navegación" selecciona la caché (puedes dejar tu historial de navegación real si lo deseas) selecciona "Cookies" y otros datos de sitios y complementos "y" imágenes y archivos en caché ", entonces está listo. – LpLrich

2

Tuve el mismo problema. Lo que hice fue usar una gema ssl enforcer que agrega un middleware que maneja ssl y redirects. Tiene una opción estricta que aplica los protocolos configurados.

en su Gemfile añadir:

gem 'rack-ssl-enforcer' 

en production.rb complemento:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, strict: true 

Esto obligará a las páginas solicitadas para ser asegurado y el resto a ser no garantizados. Deshabilita el encabezado HSTS que es problemático en Chrome (redirigir el problema de almacenamiento en caché).

También puede caducar el caché para todos los cleints (si existe) para asegurarse de que no se obtendrá redirección infinita:

config.middleware.use Rack::SslEnforcer, only: %r{your_regex_condition}, :hsts => { :expires => 1, :subdomains => false } 

quitar también la aplicación de SSL en la producción.rb (de lo contrario podría entrar en conflicto con este middleware):

config.force_ssl = false 
1

Veamos lo que sucedió una vez que actualizó su archivo de configuración con:

config.force_ssl = true 

Esto ha causado Rack SSL Middleware para ser cargado como el primer middleware. Como se puede ver en el código, SSL establece un estante HSTS header añadiendo esta línea a los encabezados: navegadores

Strict-Transport-Security 

Narra apoyo como Chrome para utilizar HTTPS para acceder a su página web.

Así que una vez le costará:

config.force_ssl = false 

Chrome todavía utiliza HTTPS para acceder a su sitio web y provoca un error.

Para resolver este problema, debe vaciar la memoria caché HSTS. Puede hacerlo yendo a la siguiente url en su navegador Chrome: chrome: // net-internals/# hsts

0

Abra sus Herramientas de desarrollo de Chrome cuando esté en localhost: Luego puede hacer clic con el botón derecho en el botón de actualización ↻ y seleccione "Vaciar el caché y recargar fuertemente".

Este error también podría ocurrirle si inicia su servidor en el entorno de producción, donde HSTS está habilitado.

Chrome lo redirecciona a https://localhost:3000/ y dice "Error de conexión SSL".

Cuestiones relacionadas