HTTP HSTS協議和 nginx

來源:互聯網
上載者:User

HTTP HSTS協議和 nginx
導讀Netcraft 公司最近公布了他們檢測SSL/TLS網站的研究,並指出只有僅僅5%的使用者正確執行了HTTP嚴格傳輸安全HSTS。本文介紹nginx如何配置HSTS。

什麼是HSTS

HTTPS(SSL和TLS)確保使用者和網站通訊過程中安全,使攻擊者難於攔截、修改和假冒。當使用者手動輸入欄位名或http://連結,該網站的第一個請求是未加密的,使用普通的http。最安全的網站立即發送回一個重新導向使使用者引向到https串連,然而,中間人攻擊者可能會攻擊攔截初始的http請求,從而控制使用者後續的回話。

自然而然HSTS應運而生為瞭解決這一潛在的安全問題。即時使用者輸入欄位名或http串連,瀏覽器將嚴格的升級到https串連。

HSTS如何工作的

HSTS策略是從安全的HTTPS網站發送的HTTP回應標頭部發布的。

Strict-Transport-Security: max-age=31536000

當瀏覽器從HTTPS網站看到這個頭部,就知道該網域名稱只能通過HTTPS(SSL 或者 TLS)訪問了。並將此資訊緩衝到31536000,也就是1年。

可選的參數includeSubDomains告訴瀏覽器該策略適用於當前域下的所有子域。

Strict-Transport-Security: max-age=31536000; includeSubDomains
nginx配置HSTS

在nginx設定檔上設定HSTS回應標頭部。

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

always 參數確保所有的響應設定該頭部,包括內部產生的錯誤響應。nginx版本早於1.7.5不支援該always參數和內部產生的錯誤響應不設定該頭部資訊。

add_header指令繼承規則:

nginx配置塊繼承add_header指令所在的封裝塊,因此只需將add_header指令放在頂級的server塊。此外還有個重要的例外,如果一個塊包含了add_header指令本身,它不會從封裝塊繼承該頭部,你需要重新定義所有的add_header指令。

server {    listen 443 ssl;     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;     # This 'location' block inherits the STS header    location / {        root /usr/share/nginx/html;    }     # Because this 'location' block contains another 'add_header' directive,    # we must redeclare the STS header    location /servlet {        add_header X-Served-By "My Servlet Handler";        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;        proxy_pass http://localhost:8080;    }}

測試HTTP嚴格傳輸安全:

一旦使用者提出HSTS策略,它的緩衝資訊期由max-age指定。在此期間,瀏覽器將會拒絕通過未加密的HTTP訪問web服務,並拒絕給予例外認證錯誤(如果該網站以前提交了一個有效可信的認證)。如果指定了一個includeSubDomanis參數,這些限制也同樣適用於當前域下的所有子域。

當你測試HSTS時,max-age時間設定短點。

是否每個HTTPS響應需要有一個STS頭部:

我們的目標是當使用者開始HTTPS回話時,儘可能快的呈現HSTS策略。如果他們在回話期間接收到HSTS策略,他們仍然容易受到HTTP劫持攻擊的。瀏覽器只需查看一次STS頭部,因此它不是嚴格必要將它添加到每個位置塊和每個響應。然而,只在首頁或者登陸頁面添加它可能是不夠的,如果你只添加到緩衝的響應,用戶端可能無法看到它。確保儘可能多的合理的覆蓋到你的URL,特別注意動態內容。

HTTP和HTTPS並行

有時網站需要同時運行在HTTP和HTTPS下

server {    listen  80;    listen  443 ssl;    ...}

有時,需要將http請求重新導向到https

server {    listen 80 default_server;    listen [::]:80 default_server;    server_name _;     # Discourage deep links by using a permanent redirect to home page of HTTPS site    return 301 https://$host;     # Alternatively, redirect all HTTP links to the matching HTTPS page    # return 301 https://$host$request_uri;} server {    listen 443 ssl;    server_name www.ttlsa.com;     add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;}
加強HSTS

保護用戶端從HTTP攔截,從它看到STS頭部到聲明的max-age的期間內。然而,HSTS並不是HTTP回話劫持的完美解決方案。使用者仍然容易受到攻擊,如果他們通過HTTP訪問HSTS保護的網站時:

  1. 以前從未訪問過該網站
  2. 最近重新安裝了其作業系統
  3. 最近重新安裝了其瀏覽器
  4. 切換到新的瀏覽器
  5. 切換到一個新的裝置如行動電話
  6. 刪除瀏覽器的緩衝
  7. 最近沒訪問過該站並且max-age到期了

為瞭解決這個問題,google堅持維護了一個“HSTS preload list”的網站網域名稱和子網域名稱,並通過https://hstspreload.appspot.com/提交其網域名稱。該網域名稱列表被分發和寫入程式碼到主流的web瀏覽器。用戶端訪問此列表中的網域名稱將主動的使用HTTPS,並拒絕使用HTTP訪問該網站。

一旦設定了STS頭部或者提交了你的網域名稱到HSTS預先載入列表,這是不可能將其刪除的。這是一個單向的決定使你的網域名稱通過HTTPS可用的。

原文來自:http://www.ttlsa.com/nginx/http-hsts-nginx/

轉載地址:http://www.linuxprobe.com/http-hsts-nginx


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.