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