背景
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 解決辦法
/etc/letsencrypt
目錄下查看是否有:ssl-dhparams.pem
文件- 如果有則直接設置 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";
.....
}