本文介紹nginx在提供HTTPS時使用的一些其餘配置選項。 雖然這些功能有助於優化nginx的SSL和TLS,但這不是一個完整對加固nginx的介紹。 確保您的服務器安全的最佳方法是不只須要正確的配置,並且須要始終遵循最佳安全的設置實踐。html
<br\>
默認狀況下,nginx與任何鏈接到服務器的客戶端共享其版本號。 例如,若是沒有找到目錄,nginx將返回包含其版本號的404錯誤。 關閉nginx版本顯示使得攻擊者沒法清楚的獲得具體版本,所以能夠阻止他進行特定於版本的漏洞攻擊。
1.要禁用server_tokens,請打開/etc/nginx/nginx.conf文件。 在http塊中,附加或取消註釋如下行:nginx
2.保存更改並重啓nginxweb
<br\>
2010年9月,Google發佈了適用於Chrome 6全部版本的的SPDY協議.SPDY目前正在逐步淘汰,以支持HTTP/2。 nginx在2016年5月刪除了對Chrome中SPDY的支持。僅在nginx 1.8.x或更早版本中支持SPDY,而從1.9.5開始的版本開始支持HTTP/2。 檢查你的nginx版本:
nginx -v
HTTP/2是HTTP標準的新版本,替代HTTP/1.1以減小頁面加載時間。 傳統上,當用戶訪問網頁時,須要創建單獨的HTTP鏈接以加載每一個資源(例如HTML,CSS,JavaScript或圖像)。 HTTP/2容許在單個鏈接上併發請求資源。 服務器還會在將資源發送到客戶端以前對其進行壓縮,這有利用減小的傳輸帶寬。
1.要啓用HTTP/2,請打開nginx SSL虛擬主機配置文件。 根據你安裝nginx方式,這可能位於/etc/nginx/sites-enabled/default或/etc/nginx/conf.d/example_ssl.conf。 在「SSL配置」中查找listen行。 若是須要,取消註釋如下行,並將http2添加到分號前的結尾。
/etc/nginx/conf.d/example_ssl.conf:windows
2.保存修改並重啓nginxcentos
3.打開https://tools.keycdn.com/http2-test網站,輸入域名測試是否正確支持HTTP/2。瀏覽器
<br\>
Google如今對搜索結果中使用HTTPS加密鏈接的網站進行優先排名,所以將HTTP請求重定向到HTTPS是提升網頁排名的一種可能方法。 然而,在遵循這些步驟以前,請務必研究舊版瀏覽器可能出現的兼容性問題。
1.打開您的HTTP nginx虛擬主機配置文件,可能位於/etc/nginx/conf.d/default.conf,/etc/nginx/nginx.conf或/etc/nginx/sites-enabled/default,具體取決於您安裝nginx的方式。 更改example.com以匹配您的服務器的域名或主機名:
/etc/nginx/conf.d/default.conf:緩存
2.在server_name行下面附加如下行。
/etc/nginx/conf.d/default.conf:安全
3.註釋掉(放置#在前面)全部其餘行,因此你的配置看起來像這樣:
/etc/nginx/conf.d/default.conf:服務器
4.保存更改並重啓nginxsession
<br\>
建立在線證書狀態協議(OCSP)是爲了加速操做系統和瀏覽器用於檢查證書吊銷的過程。 例如,當您在Windows計算機上使用Internet Explorer或Google Chrome時,Windows默認配置爲檢查證書吊銷。 在OCSP以前,您的操做系統或瀏覽器將下載證書吊銷列表(CRL)。 CRL已經變得很是大,以致於瀏覽器廠商正在建立本身的CRL並將其分發給用戶。
OCSP的問題是,用戶在使用由同一供應商或證書頒發機構提供的證書的網站跳轉時,證書頒發機構能夠跟蹤用戶這種行爲。 爲了防止這種狀況,能夠啓用OCSP stapling。
當啓用OCSP stapling時,服務器上的nginx將向客戶端發出OCSP請求。 從OCSP服務器收到的響應被添加到nginx對用戶的響應中。 這消除了用戶鏈接到OCSP服務器以檢查服務器證書的撤銷狀態的須要。
1.打開您的HTTPS nginx虛擬主機配置文件,可能位於/etc/nginx/conf.d/example_ssl.conf或/etc/nginx/sites-enabled/default,具體取決於您如何安裝和配置nginx。 在server塊中添加如下行:
/etc/nginx/conf.d/example_ssl.conf:
2.保存更改並重啓nginx
3.打開https://www.ssllabs.com/ssltest/,檢查OCSP stapling是否正確開啓。
<br\>
Google Chrome,Mozilla Firefox,Opera和Safari目前支持HSTS標頭。 HSTS用於強制瀏覽器僅使用安全加密鏈接進行鏈接。 這意味着您的網站將沒法再經過HTTP訪問。 當HSTS啓用而且有效的HSTS頭存儲在用戶瀏覽器緩存中時,若是顯示由不受信任的證書頒發機構頒發的自簽名,過時或SSL證書,則用戶將沒法訪問您的網站。 用戶也將沒法繞過任何證書警告,除非您的HSTS標頭過時或瀏覽器緩存已清除。
將全部流量從HTTP重定向到HTTPS後,您可能須要容許用戶僅使用HTTPS進行鏈接。 在啓用HSTS以前,請確保您瞭解與舊版瀏覽器的兼容性的潛在影響。
若是您但願用戶可以經過HTTP訪問您的網站,請不要按照這些步驟操做!
1.打開您的nginx HTTPS虛擬主機配置文件。 這可能位於/etc/nginx/sites-enabled/default或/etc/nginx/conf.d/example_ssl.conf。 在您的server塊中附加如下行:
/etc/nginx/conf.d/example_ssl.conf:
max-age屬性以秒爲單位設置此標頭的到期日期; 在上述配置中,報頭將在1年後過時。 您能夠將其配置爲更長或更短,但對Qualys測試,少於180天的時間被認爲過短了。 includeSubdomains參數在全部子域上強制執行HSTS。
2.保存更改並重啓nginx
3.打開https://www.ssllabs.com/ssltest/,測試配置是否生效。
<br\>
內容嗅探容許瀏覽器檢查字節流以便「猜想」其內容的文件格式。 它一般用於幫助不能正確識別其Web內容的MIME類型的網站,但它也致使出現了跨站點腳本和其餘攻擊的漏洞。 要禁用內容嗅探,請在server塊中的nginx SSL配置文件中添加如下行:
/etc/nginx/conf.d/example_ssl.conf:
<br\>
HTTPS響應頭X-Frame-Options能夠指定頁面是否可以在框架,iframe或對象中呈現。 若是未設置,您的網站的內容可能會在clickjacking攻擊中嵌入到其餘網站的HTML代碼中。 要禁用嵌入內容,請將如下行添加到server塊中的SSL配置文件中:
/etc/nginx/conf.d/example_ssl.conf:
若是您但願限制嵌入而不是徹底禁用它,則能夠用SAMEORIGIN替換DENY。 這將容許您在框架中使用您的頁面,只要是在同一網站中。
<br\>
咱們使用4096位RSA私鑰來簽署Diffie-Hellman密鑰交換,可是Diffie-Hellman的默認參數只指定1024位,一般使其成爲SSL密碼套件中最弱的鏈路。 咱們應該爲密鑰交換生成本身的自定義參數,以提供更高的安全性。
1.切換到certs目錄
2.爲TLS握手建立自定義參數。 這裏咱們將使用4096位密鑰來實現高安全性:
3.經過將如下行添加到server塊中的nginx SSL配置文件中來指定新參數:
/etc/nginx/conf.d/example_ssl.conf:
4.保存更改並重啓nginx
<br\>
你的/etc/nginx/conf.d/example_ssl.conf如今應該看起來相似於:
/etc/nginx/conf.d/example_ssl.conf:
打開https://www.ssllabs.com/ssltest/,測試SSL。