为瘦服务器和sinatra启用SSL

时间:2015-02-10 13:28:48

标签: ruby ssl https sinatra

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

我做了以下事情: -

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

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

我用于我的网络应用程序的Web框架是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吗?

1 个答案:

答案 0 :(得分:1)

我使用Rack::SslEnforcer使用SSL在Heroku上运行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设置为秘密和长期存在的东西。