2012-05-17 32 views
38

Tenía una aplicación de Rails con config.force_ssl = true, pero ahora no quiero el cifrado SSL, pero mi aplicación sigue redirigiendo a https. Leí que este es un problema de Seguridad de Transporte Estricto de HTTP en Apache. ¿Cómo puedo desactivarlo?Cómo deshabilitar HTTP Strict Transport Security?

Respuesta

68

No es un problema con Apache, pero con el hecho de que Rails envía un encabezado HSTS.

En Chrome, puede borrar el estado de HSTS entrando en about:net-internals, como se describe en ImperialViolet: HSTS UI in Chrome. También puede tener que borrar la caché, ya que config.force_ssl = true también usa una redirección 301 (permanente).

Además, de acuerdo con this answer, también puede hacer que su aplicación envíe un encabezado STS con max-age = 0. En su controlador:

response.headers["Strict-Transport-Security"] = 'max-age=0' 
+7

Se debe documentar que una vez que habilite la opción 'force_ssl' en Rails, la única forma de desactivarla es hacer que todos los visitantes borren su caché del navegador.:( –

+10

Si este no fuera el caso, sería vulnerable a la extracción de SSL, que es lo que HSTS está diseñado para mitigar. Nada que ver con Rails. – Ali

+0

, sin embargo, valdría la pena mencionarlo a los desarrolladores :) Gracias por esta respuesta @ Bruno –

13

Sólo quería señalar la respuesta de @ @ Bruno y sugerencias de JoeVanDyk son verdaderas y pueden aplicarse más allá del contexto de rieles/Apache. Estoy usando PHP y Nginx. PHP no tiene nada que ver con eso en mi caso, pero aquí están los pasos con Nginx:

//sorry here's the nginx.conf part first, can't figure out how to mix multi-line 
//code with an ordered list 

server { 
    #... 
    #change: 
    # add_header Strict-Transport-Security "max-age=315360000; includeSubdomains";  
    #to: 
    add_header Strict-Transport-Security "max-age=0;"; 
    #... 
} 
  1. clara su "historial de navegación". Para aclarar la sugerencia de @ JoeVanDyk, creo que debes borrar el "historial de navegación" porque no me funcionaba borrar el caché (probado en Chrome/Firefox, agrega comentarios si sabes más).

  2. archivo nginx.conf (ver el código de seguridad)

  3. servidor reinicio

    [email protected]:~# /etc/init.d/nginx restart.

Después de esto, se puede revertir el comando nginx add_header Strict.. a lo que tenía previamente. Solo asegúrate de repetir los pasos 1-3 nuevamente.

+1

Debo agregar que no debería necesitar reiniciar, sino recargar. P.ej. '/etc/init.d/nginx reload' –

1

ID calculado ofrecen un poco de pensamiento sobre esto. Establecer el tiempo de caché en 0 es la mejor opción y, si lo apagas, debes dejarlo en 0 durante semanas para borrar los navegadores de los clientes. Si solo necesita borrar HSTS en chrome (para su propio navegador) puede usar chrome://net-internals/#hsts en la barra de direcciones para borrar el caché de su sitio en su navegador específico. Combinado con la "puerta de entrada" a continuación, se vuelve útil.

Puede establecer modos HSTS temporales configurando/suplantando una cabecera personalizada =>. Básicamente, si existe un encabezado de solicitud especial y coincide con una clave, configure HSTS con un tiempo de caché de lo que necesite. Esto le permitiría encender o apagar el HSTS para todo el tráfico excepto usted. Es útil para probar HSTS antes de habilitarlo globalmente (para asegurarse de que se estén cargando todos los activos). También es útil si quieres borrar temporalmente la caché del cliente mientras se repara algo (dejándote espacio para la prueba).

+0

¿Cómo se establece el" tiempo de caché "? No hay una opción en 'chrome: // net-internals/# hsts' – Pacerier

+0

@Pacerier Ah chrome puede borrar el HSTS pero no puede establecer el tiempo de caché. El tiempo de caché proviene del encabezado HSTS de origen/sitio. Parte de esto puede verse así: 'strict-transport-security: max-age = 15552000' ... básicamente necesitas decir' strict-transport-security: max-age = 0' para deshabilitar HSTS para clientes y borre sus redireccionamientos (o, permita que se conecten con SSL no válido). – dhaupin

+0

Pero, ¿cómo podría el usuario editarlo en el lado del cliente? – Pacerier

0

Descubrí que no podía eliminar una entrada de HSTS en Chrome porque estaba usando una dirección de IP para el desarrollo. Parece que no pude obtener chrome://net-internals/#hsts para eliminar la entrada. Descubrí que Chrome almacena las entradas en ../AppData/local/Google/Chrome/User Data/Default/TransportSecurity, así que simplemente eliminé el archivo. Por supuesto, elimina todas las solicitudes de HSTS, pero sospecho que se reconstruirán con el tiempo.

Cuestiones relacionadas