2015-02-10 97 views
3

我正在嘗試爲我的瘦服務器Web應用啓用SSL,以便它可以通過HTTPS工作。爲瘦服務器和Sinatra啓用SSL

我也做了以下內容: -

瘦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文件存儲在那裏。

我用於web應用程序的web框架是Sinatra。我還使用機架SSL寶石以下列方式..

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紅寶石寶石,並重新啓動我的應用程序,並去https://localhost:9090,i獲得ssl連接錯誤,並提供以下詳細信息:

無法與服務器建立安全連接。這可能是服務器的問題,或者它可能需要您沒有的客戶端身份驗證證書。 錯誤代碼:ERR_SSL_PROTOCOL_ERROR

任何人都可以請告訴我如何最好地配置瘦服務器來啓用SSL?

+0

您是否看到http://stackoverflow.com/q/11405161/335847? – iain 2015-02-10 17:21:48

+0

更新 - 嗨,我已經實現了這個解決方案,它的工作原理(ISH),但仍試圖讓它與cert_chain_file(自簽名證書)和private_key_file(私鑰)的路徑工作。 – user4219550 2015-02-11 09:01:25

回答

1

我在Heroku上使用Rack::SslEnforcer運行西納特拉又瘦,SSL,這樣做:

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設置爲祕密的東西,長十歲上下。