在 nginx 中啟用 HTTP/2 並提高 HTTPS 安全性與效能
  • 5,567 views,
  • 2016-03-01,
  • 上傳者: 洪國恩,
  •  0
HTTP/2 總算在去年定稿了 (RFC 7540),相關的服務也慢慢增加
 
今天就簡單介紹一下如何在 nginx 上提供 HTTP/2
當然,如果要使用 HTTP/2,最好先申請 SSL,並啟用 HTTPS
 
為何要透過 nginx 提供 HTTP/2 呢? 其實主要是很多服務可能礙於很多種狀況 "升不上去",例如還在使用 apache 2.2 (HTTP/2 應該是到 apache 2.4 才提供) 之類的! 如果 web server 升不上去,透過 nginx 做 reverse proxy 是滿好的選擇的。
至於如何設定可以參考這邊: Nginx 加上 SSL 設定 (reverse proxy mode)
 
有興趣也可以了解一下何謂 HTTP/2 (五分鐘介紹 HTTP/2)
步驟
1.
首先要升級你的 nignx 到 1.9.5 以上
最簡單的方法就是用 yum 設定 repo,並且修改你的 repo 如下
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/
gpgcheck=0
enabled=1
 
如果你是別的 OS,可以參考這邊的說明: http://nginx.org/en/linux_packages.html
2.
升級 nginx
yum upgrade nginx
3.
啟用 HTTP/2
其實升級到 1.9.5+ 後,只要增加 http2 在 listen 後面即可.
    listen              443 ssl http2;
    listen              [::]:443 ssl http2;
提高 HTTPS 安全性與效能
4.
測試安全性
設定完成後,可以到這邊測試看看你的 HTTPS 安不安全
 
嗯,竟然只有拿到 B,只好想辦法提高了!
5.
建立 Diffie-Hellman 參數
這主要是解決 Diffie-Hellman 公開金鑰不足的問題,很簡單,只要產生一個檔案加入設定即可
# 產生 DH parameters
openssl dhparam 4096 -out /etc/nginx/cert/dhparam.pem
然後在 nginx.conf 的 SSL 設定加上
ssl_dhparam /etc/nginx/cert/dhparam.pem;
這樣就可以了,至於這個風險的原因為可以參考這邊: https://wiki.mozilla.org/Security/Server_Side_TLS#DHE_handshake_and_dhparam
 
相關設定參考如下
ssl_dhparam /etc/nginx/cert/dhparam.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
6.
Apache 的設定方式
# 產生 dhparam
cd /etc/ssl/certs
openssl dhparam -out dhparam.pem 4096

# 把下列設定加到 ssl.conf
SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
7.
重新測試
完成後重新測試一次! Yeah~ 得到 4a00ad1cfcaea8cda01573d951ee2e63.png
8.
確認 HTTP/2 是否啟用?
到這個站測試一下就好了
Facebook 討論區載入中...
資料夾 :
發表時間 :
2016-03-01 23:57:00
觀看數 :
5,567
發表人 :
洪國恩
部門 :
老洪的 IT 學習系統
QR Code :