Rails + SSL: ¿Por controlador o por toda la aplicación?

Podría usar algo de sabiduría de cualquier desarrollador que haya trabajado con Rails y SSL. Tengo una aplicación bastante simple y estoy en proceso de implementar el procesamiento de pagos. Obviamente, el procesamiento de pagos requiere SSL, así que lo estoy configurando ahora.
Mi intención cuando comencé a trabajar en esto hoy fue encontrar la forma más sencilla y limpia de imponer SSL en acciones específicas del controlador, es decir, cualquier cosa que tenga que ver con el pago. Pensé que no había ninguna razón para ejecutar el rest de mi sitio en SSL.

Encontré la gem ssl_requirement que parece encargarse de configurar SSL por controlador-acción sin mucha dificultad, así que eso es bueno. También encontré esta pregunta que parece indicar que el manejo de SSL con una gem ahora está fuera de estilo.
También encontré varias respuestas / comentarios, etc., sugiriendo que un sitio debería usar Rack middleware como Rack-SSL para forzar a todo el sitio a modo SSL.

Así que ahora estoy un poco confundido, y no estoy seguro de qué debo hacer. ¿Podría alguien con experiencia trabajando con Rails 3 y SSL ayudarme a entender:

  1. Si debo forzar todo el sitio a SSL, o solo por ciertas acciones.
  2. Qué problemas hay que tener en cuenta al usar SSL en Rails (nunca lo he hecho antes).
  3. Si por controlador es el camino a seguir, si tiene sentido usar la gem de ssl-requirement o si debería usar las nuevas opciones de enrutamiento y ayuda de enlace …

Apreciaría mucho su opinión, esto se ha convertido en una decisión paralizadora para mí. ¡Gracias!

Me he encontrado “paralizado” por esta decisión en el pasado, y esto es lo que pienso cada vez.

Primero, tenga en cuenta que algunos navegadores emitirán advertencias emergentes si continúa cambiando de SSL, o si sirve algún contenido (la página) con SSL y otro contenido (imágenes, css) sin él. Obviamente eso no es una buena experiencia para los usuarios.

  1. El único inconveniente posible de requerir SSL en todas partes es el rendimiento. Pero a menos que espere más de 1000 usuarios por día que harán muchas cosas que * no * requieren SSL, esto es insignificante.

  2. SSL se maneja en el nivel Apache / Nginx / cualquier nivel. Entonces, si decide poner su aplicación completa detrás de SSL, tiene más sentido tratar con ella en el nivel del servidor web (redirija http: /yoursite.com a https://yoursite.com) .

Y si, por razones de rendimiento, decide no poner todo detrás de SSL, entonces podría tener sentido manejar las redirecciones de SSL en el nivel del servidor web. Permitir a su usuario a través de su servidor web, y luego enviarlo a través de la mitad de la stack de Rails, solo para que vuelva a arrancar y comenzar de nuevo es un gran desperdicio.

Por supuesto, hay algo que decir para la simplicidad y los dominios de conocimiento, que sugerirían manejar redirecciones en su aplicación Rails o middleware, ya que “sabe” qué es seguro e inseguro.

Pero esas son cosas que tendrás que pesar tú mismo. Depende de si el rendimiento en bruto o la simplicidad del desarrollo / mantenimiento es más importante.

Normalmente termino con un host virtual para http://mysite.com que redirige todo (o, a veces, solo algunos uris) a https://mysite.com/ $ 1. Espero que sea de ayuda.