溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

nginx是如何配置HSTS的

發(fā)布時間:2022-01-24 13:44:53 來源:億速云 閱讀:202 作者:柒染 欄目:開發(fā)技術(shù)

這篇文章主要為大家分析了nginx是如何配置HSTS的的相關(guān)知識點,內(nèi)容詳細易懂,操作細節(jié)合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學(xué)習(xí)“nginx是如何配置HSTS的”的知識吧。

Netcraft 公司最近公布了他們檢測SSL/TLS網(wǎng)站的研究,并指出只有僅僅5%的用戶正確執(zhí)行了HTTP嚴格傳輸安全HSTS。

什么是HSTS

HTTPS(SSL和TLS)確保用戶和網(wǎng)站通訊過程中安全,使攻擊者難于攔截、修改和假冒。當用戶手動輸入域名或http://鏈接,該網(wǎng)站的第一個請求是未加密的,使用普通的http。最安全的網(wǎng)站立即發(fā)送回一個重定向使用戶引向到https連接,然而,中間人攻擊者可能會攻擊攔截初始的http請求,從而控制用戶后續(xù)的回話。

自然而然HSTS應(yīng)運而生為了解決這一潛在的安全問題。即時用戶輸入域名或http連接,瀏覽器將嚴格的升級到https連接。

nginx是如何配置HSTS的

HSTS如何工作的

HSTS策略是從安全的HTTPS站點發(fā)送的HTTP響應(yīng)頭部發(fā)布的。

Strict-Transport-Security: max-age=31536000

當瀏覽器從HTTPS站點看到這個頭部,就知道該域名只能通過HTTPS(SSL 或者 TLS)訪問了。并將此信息緩存到31536000,也就是1年。

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

Strict-Transport-Security: max-age=31536000; includeSubDomains

nginx配置HSTS

在nginx配置文件上設(shè)置HSTS響應(yīng)頭部。

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

always 參數(shù)確保所有的響應(yīng)設(shè)置該頭部,包括內(nèi)部產(chǎn)生的錯誤響應(yīng)。nginx版本早于1.7.5不支持該always參數(shù)和內(nèi)部產(chǎn)生的錯誤響應(yīng)不設(shè)置該頭部信息。

add_header指令繼承規(guī)則:

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服務(wù),并拒絕給予例外證書錯誤(如果該網(wǎng)站以前提交了一個有效可信的證書)。如果指定了一個includeSubDomanis參數(shù),這些限制也同樣適用于當前域下的所有子域。

當你測試HSTS時,max-age時間設(shè)置短點。

是否每個HTTPS響應(yīng)需要有一個STS頭部:

我們的目標是當用戶開始HTTPS回話時,盡可能快的呈現(xiàn)HSTS策略。如果他們在回話期間接收到HSTS策略,他們?nèi)匀蝗菀资艿紿TTP劫持攻擊的。瀏覽器只需查看一次STS頭部,因此它不是嚴格必要將它添加到每個位置塊和每個響應(yīng)。然而,只在主頁或者登陸頁面添加它可能是不夠的,如果你只添加到緩存的響應(yīng),客戶端可能無法看到它。確保盡可能多的合理的覆蓋到你的URL,特別注意動態(tài)的內(nèi)容。

HTTP和HTTPS并行

有時網(wǎng)站需要同時運行在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的期間內(nèi)。然而,HSTS并不是HTTP回話劫持的完美解決方案。用戶仍然容易受到攻擊,如果他們通過HTTP訪問HSTS保護的網(wǎng)站時:

  1. 以前從未訪問過該網(wǎng)站

  2. 最近重新安裝了其操作系統(tǒng)

  3. 最近重新安裝了其瀏覽器

  4. 切換到新的瀏覽器

  5. 切換到一個新的設(shè)備如移動電話

  6. 刪除瀏覽器的緩存

  7. 最近沒訪問過該站并且max-age過期了

為了解決這個問題,google堅持維護了一個“HSTS preload list”的站點域名和子域名,并通過https://hstspreload.appspot.com/提交其域名。該域名列表被分發(fā)和硬編碼到主流的web瀏覽器。客戶端訪問此列表中的域名將主動的使用HTTPS,并拒絕使用HTTP訪問該站點。

一旦設(shè)置了STS頭部或者提交了你的域名到HSTS預(yù)加載列表,這是不可能將其刪除的。這是一個單向的決定使你的域名通過HTTPS可用的。

關(guān)于“nginx是如何配置HSTS的”就介紹到這了,更多相關(guān)內(nèi)容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網(wǎng)站!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI