【问题标题】:Enabling SSL for a thin server and sinatra为瘦服务器和 sinatra 启用 SSL
【发布时间】:2015-04-10 13:25:05
【问题描述】:

我正在尝试为我的瘦服务器 Web 应用启用 SSL,以便它可以通过 HTTPS 工作。

我做了以下事情:-

启动瘦 Web 服务器 MyApp.run! :host => '127.0.0.1', :port => 9090, :sslenable => true, :sslverifyclient => OpenSSL::SSL::VERIFY_NONE, :sslcertificate => '.ssl/server_key.pem', :sslprivatekey => '.ssl/key.pem'

我使用 Ruby 中的 openssl 模块生成了一个自签名证书和私钥,创建了一个名为 .ssl 的目录并将它们作为 pem 文件存储在那里。

我的网络应用程序使用的网络框架是 Sinatra。我也通过以下方式使用 rack-ssl gem..

myapp.rb

require 'rack/ssl'

class MyApp < Sinatra ::Base
use Rack::SSL
use Rack::Session::Cookie,
        :key => '_rack_session', 
        :path => '/',
        :expire_after => 2592000, 
        :secret => ''

...
end

当我转到 http://localhost:9090 时,我希望看到我的应用程序正常显示,但带有挂锁和交叉,因为任何 http 请求都被重定向到 https,并且我看到错误“网页不可用” .但是,当我删除 ssl-rack ruby​​ gem 并重新启动我的应用程序并转到 https://localhost:9090,i 时,会收到带有以下详细信息的 ssl 连接错误:

无法与服务器建立安全连接。这可能是服务器的问题,或者可能需要您没有的客户端身份验证证书。 错误代码:ERR_SSL_PROTOCOL_ERROR

谁能告诉我如何最好地配置瘦服务器以启用 SSL?

【问题讨论】:

  • 更新 - 嗨,我已经实现了这个解决方案并且它可以工作(ish),但仍然试图让它与 cert_chain_file(自签名证书)和 private_key_file(私钥)的路径一起工作。跨度>

标签: ruby ssl https sinatra


【解决方案1】:

我在 Heroku 上使用 Rack::SslEnforcer 运行 Sinatra 和 Thin,这样做:

if production?
    require 'rack/ssl-enforcer'
    use Rack::SslEnforcer
end

这应该在您的文件中之前 enable :sessions。因此,当您配置应用程序时,需要将 Rack::SslEnforcer 放在会话部分上方。

有些不相关,但可能仍然相关,您可以考虑添加:

require 'encrypted_cookie'

cookie_config = {        
  :key          => 'usr',
  :path         => "/",
  :expire_after => 86400, # one day in seconds
  :secret       => ENV["COOKIE_KEY"], 
  :httponly     => true
  }
cookie_config.merge!( :secure => true ) if production?

use Rack::Session::EncryptedCookie, cookie_config

您还需要在您的环境中将 COOKIE_KEY 设置为秘密且较长的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    相关资源
    最近更新 更多