En primer lugar voy a mostrar cómo forzar SSL en las versiones actuales y anteriores de los carriles, luego, al final he fijado cómo utilizar HTTP y HTTPS en paralelo entre sí, que es lo que creo que tu buscas.
Rieles> = 3.1
Utilice simplemente config.force_ssl = true
en la configuración del entorno.
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = true
end
end
También puede activar selectivamente https dependiendo del entorno de Rails actual. Por ejemplo, es posible que desee mantener HTTPS desactivado en el desarrollo y habilitarlo en etapas/producción.
# config/application.rb
module MyApp
class Application < Rails::Application
config.force_ssl = false
end
end
# config/environments/production.rb
MyApp::Application.configure do
config.force_ssl = true
end
rieles < 3,1
En caso de que algún proyecto que no son rieles 3.1 y quieren la misma característica. Habilite HTTPS agregando la siguiente línea a la configuración de su entorno.
config.middleware.insert_before ActionDispatch::Static, "Rack::SSL"
Tenga en cuenta que estoy pasando Rack::SSL
como cadena de delegar la carga de la clase al final de la inicialización de la aplicación Rails. También tenga en cuenta que el middleware debe insertarse en una posición específica en la pila, al menos antes de ActionDispatch::Static
y ActionDispatch::Cookies
.
No olvide definir la dependencia Rack :: SSL en su Gemfile.
# Gemfile
gem 'rack-ssl', :require => 'rack/ssl'
Habilitación de HTTPS y HTTP en paralelo
Rack::SSL
tiene una característica muy interesante y documentada. Puede pasar una opción :exclude
para determinar cuándo habilitar/deshabilitar el uso de HTTPS.
El siguiente código habilita Rack::SSL
y todos sus filtros solo en caso de que la solicitud provenga de una conexión HTTPS.
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }
Tanto las siguientes URL seguirán funcionando, pero el primero activarán los filtros Rack::SSL
.
https://secure.example.com
http://example.com
¿Por qué molestarse obligando a sus usuarios para autenticar a través de SSL cuando, tan pronto como la autenticación se realiza, cualquiera puede piratear sus sesiones con, por ejemplo, fireresheep, el complemento gratuito para hackear Firefox de sesiones.Si intenta usar SSL de esta manera, no está protegiendo a sus usuarios. En cambio, si alguna parte de su sitio necesita ser entregada a través de SSL, entonces desde una perspectiva de seguridad real es probable que cada parte de su sitio necesite ser entregada a través de SSL también (o, al menos, cada parte después de la autenticación). – yfeldblum