En una pregunta anterior , descubrí que debería configurar la terminación nginx ssl y no hacer que Rails procese datos cifrados.
Entonces, ¿por qué existe lo siguiente?
config.force_ssl = true
Veo esto comentado en el archivo de configuración de producción. Pero si la expectativa es que nginx manejará todas las cosas ssl para que mi aplicación rails no maneje datos encriptados, ¿qué hace config.force_ssl = true?
¿Debo dejarlo comentado en producción si sé que siempre usaré nginx?
fuente

force_sslpropiedad separada por controlador . Laforce_sslvariable de configuración, que instala elRack::SSLmiddleware, que habilita HSTS de forma predeterminada .config.force_ssl = truedebería ser el predeterminado, ¿por qué el equipo de Rails lo comentó como predeterminado?El entorno
config.force_sslincluyeActionDispatch::SSL. LosActionDispatch::SSLdocumentos describen la funcionalidad de la siguiente manera (énfasis agregado para mayor claridad):DOCS
Este middleware se agrega a la pila cuando
config.force_ssl = truese pasan las opciones establecidas enconfig.ssl_options. Realiza tres trabajos para hacer cumplir las solicitudes HTTP seguras:Redireccionamiento TLS: Redirige permanentemente las solicitudes http: // a https: // con el mismo host de URL, ruta, etc. Habilitado de forma predeterminada. Configure
config.ssl_optionspara modificar la URL de destino (predirect: { host: "secure.widgets.com", port: 8080 }. Ej. ), O configureredirect: falsepara deshabilitar esta función.Cookies seguras: establece la
securemarca en las cookies para indicar a los navegadores que no deben enviarse junto con solicitudes http: //. Habilitado por defecto. Configureconfig.ssl_optionsconsecure_cookies: falsepara deshabilitar esta función.Seguridad de transporte estricta HTTP (HSTS): le dice al navegador que recuerde este sitio como solo TLS y redirija automáticamente las solicitudes que no sean TLS . Habilitado por defecto. Configure
config.ssl_optionsconhsts: falsepara deshabilitar. Establecerconfig.ssl_optionsconhsts: { … }para configurar HSTS:expires: Cuánto tiempo, en segundos, se mantendrán estos ajustes. El valor predeterminado es180.days(recomendado). El mínimo requerido para calificar para las listas de precarga del navegador es18.weeks.subdomains: Configúrelo paratrueindicarle al navegador que aplique esta configuración a todos los subdominios. Esto protege sus cookies de la interceptación de un sitio vulnerable en un subdominio. Por defecto estrue.preload: Anuncie que este sitio puede estar incluido en las listas HSTS precargadas de los navegadores. HSTS protege su sitio en cada visita, excepto en la primera visita, ya que aún no ha visto su encabezado HSTS. Para cerrar esta brecha, los proveedores de navegadores incluyen una lista integrada de sitios habilitados para HSTS. Vaya a https://hstspreload.appspot.com para enviar su sitio para su inclusión. Para desactivar HSTS, omitir el encabezado no es suficiente. Los navegadores recordarán la directiva HSTS original hasta que expire. En su lugar, use el encabezado para indicar a los navegadores que expiren HSTS inmediatamente. La configuraciónhsts: falsees un atajo parahsts: { expires: 0 }.Las solicitudes pueden excluirse de la redirección con
exclude:config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }fuente
exclude" - Advertencia: esta función sólo se ha añadido recientemente en los carriles 5, por lo que no funcionará para aquellos de nosotros en los carriles o por debajo de 4.2excludeopciones globales estaban disponibles mucho antes de Rails 5, por lo que su sintaxis es ligeramente diferente:config.ssl_options = { exclude: proc { |env| env['PATH_INFO'].start_with?('/healthcheck/') } }- serverfault.com/a/517401Esta configuración fuerza HTTPS al redirigir las solicitudes HTTP a sus contrapartes HTTPS. Por tanto, una visita del navegador
http://domain.com/pathserá redirigida ahttps://domain.com/path.Dejar el entorno comentado permitiría ambos protocolos.
Aún tiene que configurar su servidor web para manejar solicitudes HTTPS.
fuente
redirect 301 https:...), ¿TODO no pasará por https, por loconfig.force_ssl = trueque realmente no hace nada (ya que nada será http)? ¿O hay una razón de seguridad más profunda aquí?config.force_sslhabilitado, en caso de que alguien esté eliminando la redirección de la configuración del servidor web.config.force_sslyadd_header Strict-Transport-Security max-age=...;resultará en 2Strict-Transport-SecurityencabezadosObliga a que toda la comunicación con el servidor esté cifrada y utilice SSL, es decir, a través de HTTPS.
Cuando lo incluye en un controlador, ese controlador solo aceptará solicitudes HTTPS.
Enlaces Útiles:
fuente