1. 程式人生 > >MySSL HTTPS 評級 B 升 A+

MySSL HTTPS 評級 B 升 A+

背景

MySSL 提供了免費的網站 HTTPS 安全評級服務,然後我用我的網站 https://hellogithub.com,測試了一下。發現安全評級為 B,最高為 A+。下面是記錄我的網站從 B 升到 A+ 的操作和設定。

tips: 我的網站免費 SSL/TLS 證書是這家的 Let's Encrypt

一、B 升 A

1.1 現狀

評分提示:伺服器支援弱 DH 金鑰交換引數,降級為 B

1.2 原因

前向安全性 Forward Secrecy 的概念很簡單:客戶端和伺服器協商一個永不重用的金鑰,並在會話結束時銷燬它。伺服器上的 RSA 私鑰用於客戶端和伺服器之間的 Diffie-Hellman 金鑰交換籤名。從 Diffie-Hellman 握手中獲取的預主金鑰會用於之後的編碼。因為預主金鑰是特定於客戶端和伺服器之間建立的某個連線,並且只用在一個限定的時間內,所以稱作短暫模式 Ephemeral。

使用了前向安全性,如果一個攻擊者取得了一個伺服器的私鑰,他是不能解碼之前的通訊資訊的。這個私鑰僅用於 Diffie Hellman 握手簽名,並不會洩露預主金鑰。Diffie Hellman 演算法會確保預主金鑰絕不會離開客戶端和伺服器,而且不能被中間人攻擊所攔截。

所有版本的 nginx(如1.4.4)都依賴於 OpenSSL 給 Diffie-Hellman (DH)的輸入引數。不幸的是,這意味著 Diffie-Hellman Ephemeral(DHE)將使用 OpenSSL 的預設設定,包括一個用於金鑰交換的1024位金鑰。因為我們正在使用2048位證書,DHE 客戶端就會使用一個要比非 DHE 客戶端更弱的金鑰交換。

MySSL 提示的因為:現在用的 DHE 引數小於 1024 位數。

1.3 解決辦法

  1. /etc/letsencrypt 目錄下檢視是否有:ssl-dhparams.pem 檔案
  2. 如果有則直接設定 nginx 配置:ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

如果沒有,則需要自己生成,生成後配置 nginx 注意路徑:

cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

tips:生成該引數十分消耗 CPU 資源,在線上服務執行一定要注意!

1.4 結果

二、A 升 A+

2.1 現狀

評分提示:開啟HSTS後能夠提升到A+,具體參考《XXXXX》

2.2 原因

HSTS(HTTP Strict Transport Security)是國際網際網路工程組織IETF釋出的一種網際網路安全策略機制。採用HSTS策略的網站將保證瀏覽器始終連線到該網站的HTTPS加密版本,不需要使用者手動在URL位址列中輸入加密地址,以減少會話劫持風險。

MySSL 提示的因為:需要在開啟 HSTS,保證瀏覽器連線該網站始終為 HTTPS 加密版本。

2.3 解決辦法

修改 nginx 配置:

server {
    server_name hellogithub.com www.hellogithub.com;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    .....
}

2.4 結果

參考