配置WEBrick以在Rails 4中使用SSL

Vik*_*ngR 18 ssl ruby-on-rails localhost webrick ruby-on-rails-4

我有一个Rails应用程序,我想在SharePoint 2013上部署.

为了实现某种身份验证方法,我需要WEBrick server提供服务ssl https并收听传入的https port https://localhost:3001.不幸的是,我在配置服务器方面不是很有经验.

我只找到了一些旧版Rails版本的过时教程,似乎不再适合这项工作了.

任何提示都非常感谢.

Hug*_*ugo 25

我知道你要求WEBrick,请原谅我提出别的建议,但我真的建议你使用Thin ruby web服务器(更快更轻),这样你也可以启动SSL并满足你的要求:

$ thin start --ssl -p 3001
Run Code Online (Sandbox Code Playgroud)

只是不要忘记在你的Gemfile中添加gem'lema ' ;-)


col*_*rco 5

这是我的解决方案,它兼容Rails 3和4.

在顶部添加以下代码bin/rails:

require 'rubygems'
require 'rails/commands/server'
require 'rack'
require 'webrick'
require 'webrick/https'

module Rails
  class Server < ::Rack::Server
    def default_options
      ssl_default_options = {
        :Port => 443,
        :SSLEnable => true,
        :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE,
        :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.open(File.expand_path('../../config/cert/server_development.key', __FILE__)).read),
        :SSLCertificate => OpenSSL::X509::Certificate.new(File.open(File.expand_path('../../config/cert/server_development.crt', __FILE__)).read),
        :SSLCertName => [['CN', WEBrick::Utils::getservername]]
      }
      ENV['RAILS_SSL'] ? super.merge(ssl_default_options) : super
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

您显然需要生成自签名证书或购买一个.

然后当你想从命令行使用启动WebRick时RAILS_SSL=true rails s.通常您需要sudo侦听端口443,因此您可能希望附加-p 3001更改端口.