2012-01-02 12 views
1

我已經使用Capistrano,nginx/ Passenger和通配符SSL證書將我的應用部署到Ubuntu VPS。Rails在生產中設計SSL會話混合

該應用在開發和我的舞臺環境 Heroku上正常工作。

但是,當用戶使用安全頁面登錄到 網站時,生產存在兩個問題。

  1. 在最新的Chrome和Firefox瀏覽器開始執行HTTPS對每一個請求,每次請求 。無論用戶是否登錄到 。即使我在nginx上禁用了SSL,瀏覽器仍會嘗試HTTPS,並抱怨它無法連接。主頁面提供一些不安全的動態嵌入 項目並使用不安全的CDN,因此我想將該頁面作爲非 SSL提供。每當我嘗試通過 nginx重寫或Rails中的before過濾器將頁面重定向到非SSL時,它將導致無限的 重定向循環。

  2. Safari不具備上述第一個問題,它同時兼顧了 HTTPS和HTTP請求。但是,當用戶登錄並且 瀏覽到非SSL頁面時,它們即刻退出或丟失會話 。

有沒有人遇到過這樣的問題,或者對如何診斷/解決問題有想法?

感謝

回答

1

您使用Rails 3.1 force_ssl啓用SSL或寶石是?

當您啓用HTTPS時,您還啓用了HTTP Strict Transport Security標誌,該標誌在發送請求到服務器之前,瀏覽用於立即轉到該域上的任何HTTPS頁面。

在Chrome瀏覽器中,在您的瀏覽器中輸入chrome://net-internals/#hsts,然後您可以從HSTS列表中刪除您的域名,該域名將針對Chrome進行修復。不能說爲Firefox,因爲我不經常使用它。

它失去會話的問題很可能是因爲Rails將身份驗證cookie設置爲安全,這意味着它們僅針對HTTPS請求發送,而不是HTTP。確保您的Rails中的cookie_options未設置爲:secure => true。同時檢查設計cookie_options設置,以確保沒有設置:secure => true

+0

你說得對hsts問題是正確的。我使用的是Rails 3.1,但我沒有使用'force_ssl',而是使用gem'rack-ssl',需要:'rack/ssl''和'config.middleware.insert_before Rack :: Lock,Rack :: SSL,:exclude => proc {| env | env ['HTTPS']!='on'}'在生產配置中。但是,我仍然無法解決登錄會話問題。我已經檢查了cookie_options,並且沒有爲Rails或Devise設置':secure => true'。 – davicta 2012-01-03 18:48:39

+0

看起來像Rack :: SSL默認情況下會將cookie設置爲安全。這怎麼影響我的服務器上的應用程序,但不影響Heroku?另外你怎麼能夠使用Rack :: SSL禁用安全cookie? – davicta 2012-01-03 19:19:37

+0

我不能說Heroku,因爲我沒有經驗。 它看起來像你不能禁用rack-ssl中的安全cookie標記,一個選項是monkeypatch它來停止運行'flag_cookies_as_secure'。 你也可以使用rack-ssl-enforcer gem代替https://github.com/tobmatth/rack-ssl-enforcer/blob/master/lib/rack/ssl-enforcer.rb#L37,它有一個選項啓用安全cookie。 – 2012-01-03 19:46:04