如何configurationWEBrick在Rails中使用SSL?

在Rails 3之前,您可以修改脚本/服务器文件来添加SSL参数,并告诉服务器命令使用WEBrick的HTTPS版本。 现在所有这些脚本都没有了,有没有人知道如何让这个工作与Rails 3或4?

当Rails 4中的scripts目录消失时, bin目录仍然存在。 您可以通过编辑bin/rails脚本来获得WEBrick的SSL证书。 testingRails 4和Ruby 2.1.1,与rbenv一起安装。

这很多是从这篇博文和这个堆栈溢出问题 。

 #!/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' 

当SSL环境variables设置为true时,从app目录启动rails服务器立即启动启用了SSL的服务器,并且省略环境variables时保留默认的rails设置。

 $ 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: ... 

如果您不想使用预先生成的证书,则可以使用WEBrick的Utils::create_self_signed_cert ,如此答案中所述:

configurationWEBrick使用自动生成的自签名SSL / HTTPS证书

WEBrick上SSL / HTTPS的替代scheme:瘦客户端上的SSL / HTTPS

作为尝试设置WEBrick以在您的Rails应用程序中使用HTTPS / SSL的替代方法,您可以尝试切换到使用Thin服务器 ,因为它提供了用于设置HTTPS / SSL开箱即用的便捷选项。

安装Thin

首先,将Thin作为gem添加到您的Gemfile中:

 gem 'thin' 

然后从命令行运行bundle install

使用Thin HTTPS / SSL开发环境

如果您只想在本地开发环境中使用HTTPS / SSL来testingRails应用程序,那么您只需运行即可

 thin start --ssl 

我必须强调这不适用于生产环境 ,因为您需要使用来自证书颁发机构的有效SSL证书才能validationSSL和HTTPS连接的安全性。

其他选项

还有其他选项可以传递给Thin。 你可以通过运行thin --help来获得完整的列表。 例如,我喜欢指定我自己的IP地址和端口,以及将Thin精简为后台进程:

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

使用具有SSL证书的瘦HTTPS / SSL

如果您想告诉Thin使用SSL证书(例如,您从有效证书颁发机构获得的证书),则可以使用以下选项:

 thin start --ssl \ --ssl-cert-file <path-to-public-certificate> \ --ssl-key-file <path-to-private-key> 
    Interesting Posts