ruby-on-rails ruby ssl rack webrick

ruby on rails - ¿Cómo se configura WEBrick para usar SSL en Rails?



ruby-on-rails rack (2)

Antes de Rails 3, puede modificar el archivo de script / servidor para agregar parámetros SSL y decirle al comando del servidor que use la versión HTTPS de WEBrick. Ahora que todos esos guiones han desaparecido, ¿alguien sabe cómo hacer que esto funcione con Rails 3 o 4?


Una alternativa a SSL / HTTPS en WEBrick: SSL / HTTPS en Thin

Como alternativa a intentar configurar WEBrick para usar HTTPS / SSL para su aplicación Rails, puede intentar cambiar al uso del servidor Thin , ya que viene con opciones convenientes para configurar HTTPS / SSL out-of-the-box.

Instalando Thin

Primero, agrega Thin como una gema a tu Gemfile:

gem ''thin''

Luego ejecute bundle install desde la línea de comando.

Uso de Thin HTTPS / SSL para entornos de desarrollo

Si solo quiere probar su aplicación Rails usando HTTPS / SSL en su entorno de desarrollo local , simplemente ejecute

thin start --ssl

Debo enfatizar que esto no es adecuado para entornos de producción , porque necesita usar un certificado SSL válido de una Autoridad de Certificación para que las conexiones SSL / HTTPS sean verificables y seguras.

Opciones adicionales

También hay otras opciones que puede pasar a Thin. Puede obtener una lista completa de ellos ejecutando thin --help . Por ejemplo, me gusta especificar mi propia dirección IP y puerto, así como demonizar Thin en un proceso en segundo plano:

thin start --ssl / --address <ip-address> / --port <port> / --daemonize

Uso de Thin HTTPS / SSL con un certificado SSL

Si desea decirle a Thin que use un certificado SSL (por ejemplo, uno que haya obtenido de una Autoridad de certificación válida), puede usar estas opciones:

thin start --ssl / --ssl-cert-file <path-to-public-certificate> / --ssl-key-file <path-to-private-key>


Mientras el directorio de scripts en Rails 4 se ha ido, el directorio bin permanece. Puede hacer que WEBrick trabaje con un certificado SSL editando el script bin/rails . Probado en Rails 4 y Ruby 2.1.1, instalado con rbenv.

Gran parte de esto es de esta publicación de blog y esta pregunta sobre el desbordamiento de pila .

#!/usr/bin/env ruby require ''rails/commands/server'' require ''rack'' require ''webrick'' require ''webrick/https'' if ENV[''SSL''] == "true" module Rails class Server < ::Rack::Server def default_options super.merge({ :Port => 3001, :environment => (ENV[''RAILS_ENV''] || "development").dup, :daemonize => false, :debugger => false, :pid => File.expand_path("tmp/pids/server.pid"), :config => File.expand_path("config.ru"), :SSLEnable => true, :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE, :SSLPrivateKey => OpenSSL::PKey::RSA.new( File.open("certs/server.key").read), :SSLCertificate => OpenSSL::X509::Certificate.new( File.open("certs/server.crt").read), :SSLCertName => [["CN", WEBrick::Utils::getservername]], }) end end end end APP_PATH = File.expand_path(''../../config/application'', __FILE__) require_relative ''../config/boot'' require ''rails/commands''

Iniciar el servidor de rieles desde el directorio de aplicaciones funciona para iniciar un servidor SSL habilitado ahora cuando la variable de entorno SSL se establece en verdadero, y la configuración predeterminada de rieles se conserva cuando se omite la variable de entorno.

$ SSL=true rails s => Booting WEBrick => Rails 4.1.0 application starting in development on https://0.0.0.0:3001 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server [2014-04-24 22:59:10] INFO WEBrick 1.3.1 [2014-04-24 22:59:10] INFO ruby 2.1.1 (2014-02-24) [x86_64-darwin13.0] [2014-04-24 22:59:10] INFO Certificate: Data: ...

Si no desea utilizar un certificado generado previamente, puede utilizar los Utils Utils::create_self_signed_cert , como se describe en esta respuesta:

Configure WEBrick para usar el certificado SSL / HTTPS autofirmado generado automáticamente