【问题标题】:Configuring WEBrick to use SSL in Rails 4在 Rails 4 中配置 WEBrick 以使用 SSL
【发布时间】:2014-02-07 00:30:00
【问题描述】:

我有一个要在 SharePoint 2013 上部署的 Rails 应用程序。

为了实现某种身份验证手段,我需要WEBrick server 服务ssl https 并在port https://localhost:3001 上监听传入的https。不幸的是,我对配置服务器不是很有经验。

我只发现了一些旧版 Rails 的过时教程,这些教程似乎不再适用了。

非常感谢任何提示。

【问题讨论】:

  • How do you configure WEBrick to use SSL in Rails 3? 的可能重复项。投票结束,因为该解决方案与该问题中公认的解决方案基本相同。不确定是否应该将另一个实际上复制到这个新的。
  • @Cupcake 那是 Rails 3 用的,Rails 4 不使用 script\rails 文件。
  • @Chloe 您无法分辨,因为您还没有足够的声誉,但the answer that used to be here but was subsequently deleted 与链接的博客文章基本相同。实际上有很多抄袭,无论是有意的还是无意的,都是由那篇博文引起的,不仅仅是这个问题,还有 StackOverflow 周围的其他人。
  • @Chloe 例如,参见this answer
  • @Chloe 你想做什么?

标签: ruby-on-rails ssl ruby-on-rails-4 localhost webrick


【解决方案1】:

我知道您要求使用 WEBrick,请原谅我提出其他建议,但我真的建议您使用 Thin ruby​​ 网络服务器(更快更轻),因此您也可以启动 SSL 并轻松满足您的要求如:

$ thin start --ssl -p 3001

别忘了在你的 Gemfile 中添加 gem 'thin' ;-)

【讨论】:

  • @Chloe 我实际上使用的是 Thin,我对它没有任何问题。很多人用瘦。为什么说它是“工匠”?
  • 如果我错了,请纠正我,但是如果您想将 SSL 与 Thin 一起使用,您是否还需要添加 SSL 证书?另请参阅Enable https in a rails app on a thin server
  • 它似乎包含自己的:CN: openca.steamheat.net
  • 我不得不提一下,仅仅使用--ssl 当然不适合生产环境。如果你想在生产中使用它,你必须另外告诉 Thin 使用来自证书颁发机构的有效 SSL 证书。
  • 当我用 Rails 4.1 重新加载页面时,Thin 在浏览器控制台中给我Uncaught ReferenceError: jQuery is not defined jquery_ujs.js?body=1:398 错误。
【解决方案2】:

这是我的解决方案,它与 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

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

然后,当您想从命令行启动 WebRick 时,请使用 RAILS_SSL=true rails s。通常你需要sudo 来监听443 端口,所以你可能需要附加-p 3001 来改变端口。

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多