2012-05-17 71 views
38

我有一個Rails應用程序config.force_ssl = true,但現在我不想要SSL加密,但我的應用程序仍然重定向到https。我讀到這是Apache上的HTTP嚴格傳輸安全問題。我該如何禁用它?如何禁用HTTP嚴格傳輸安全?

回答

68

這不是Apache的問題,但事實上,Rails發送一個HSTS頭。

在Chrome中,您可以進入about:net-internals來清除HSTS狀態,如ImperialViolet: HSTS UI in Chrome中所述。您也可能必須清除緩存,因爲config.force_ssl = true也使用301(永久)重定向。

另外,根據this answer,你也可以讓你的應用程序發送一個max-age = 0的STS頭。在你的控制器:

response.headers["Strict-Transport-Security"] = 'max-age=0' 
+7

應該記錄下來,一旦您在Rails中啓用'force_ssl'選項,禁用它的唯一方法就是讓所有訪問者清除瀏覽器緩存。( –

+10

)如果情況並非如此,那麼你很容易遭受SSL剝離,這是HSTS旨在緩解的問題。與Rails無關 – Ali

+0

對於開發者來說這將值得一提:)感謝這個答案@ Bruno –

13

只是想指出@布魯諾的答案,並@ JoeVanDyk的建議是真實的,可以超越的Rails /阿帕奇的環境中應用。我使用PHP和Nginx。 PHP無關,它在我的情況,但這裏與Nginx的步驟:

//sorry here's the nginx.conf part first, can't figure out how to mix multi-line 
//code with an ordered list 

server { 
    #... 
    #change: 
    # add_header Strict-Transport-Security "max-age=315360000; includeSubdomains";  
    #to: 
    add_header Strict-Transport-Security "max-age=0;"; 
    #... 
} 
  1. 清楚你的「瀏覽器歷史記錄」。爲了澄清@ JoeVanDyk的建議,我認爲你需要清除「瀏覽歷史記錄」,因爲清除緩存對我無效(在Chrome/Firefox上測試,如果你知道更多,請添加評論)。

  2. nginx.conf文件(見上面的代碼)

  3. 重啓服務器

    [email protected]:~# /etc/init.d/nginx restart

在此之後,您可以將nginx add_header Strict..命令恢復爲您以前的狀態。只要確保你再次重複步驟1-3。

+1

我應該補充說,你不需要重新啓動,而是重新加載。例如。 '/etc/init.d/nginx reload' –

1

圖形ID在這方面提供了一些想法。將緩存時間設置爲0是最佳選擇,如果將其關閉,則需要將其保持爲0幾周以清除客戶端瀏覽器。如果您只需要清除chrome中的HSTS(針對您自己的瀏覽器),則可以在地址欄中使用chrome://net-internals/#hsts來清除您的網站在您的特定瀏覽器中的緩存。結合下面的「門道」,它變得有用。

您可以通過設置/欺騙自定義標題=>鍵來設置臨時HSTS模式。基本上,如果存在一個特殊的請求標頭,並且它與某個鍵相匹配,請將HSTS設置爲所需緩存時間。這將允許您打開或關閉所有流量的HSTS,但您。在全球啓用之前嘗試使用HSTS(以確保所有資產正在加載)。如果您想暫時清除客戶端緩存而修復某些內容(爲您留出測試空間),此功能也很有用。

+0

你如何設置「緩存時間」? 'chrome:// net-internals /#hsts'沒有選項 – Pacerier

+0

@Pacerier Ah chrome可以清除HSTS,但不能設置緩存時間。緩存時間來自原始/站點HSTS標頭。其中的一部分可能看起來像這樣:'strict-transport-security:max-age = 15552000' ......基本上你需要它說'strict-transport-security:max-age = 0'以禁用客戶端的HSTS並清除它們的重定向(或允許它們連接到無效的SSL)。 – dhaupin

+0

但用戶如何在客戶端自己編輯它? – Pacerier

0

我發現我無法刪除Chrome中的HSTS條目,因爲我正在使用IP地址進行開發。我似乎無法得到chrome://net-internals/#hsts刪除條目。我發現Chrome將條目存儲在../AppData/local/Google/Chrome/User Data/Default/TransportSecurity中,因此我剛剛刪除了該文件。它當然會刪除所有HSTS請求,但我懷疑它們會隨着時間的推移而重建。