Nginx作為一款高性能的Web服務器和反向代理服務器,被廣泛用于應用部署和負載均衡。在安全環保意識的逐漸提高下,HTTPS也成為現代Web應用中必不可少的一環。本篇文章將重點介紹Nginx的HTTPS部署和安全性能優化。
一、Nginx的HTTPS部署
證書申請
首先需要去證書頒發機構(CA)進行SSL證書的申請。申請成功后,會得到一個證書文件(.crt)和一個私鑰文件(.key)。
HTTPS配置
Nginx的HTTPS配置需要涉及到三個方面:HTTP轉發到HTTPS、Nginx的證書配置和HTTPS的配置。
(1)HTTP轉發到HTTPS
在Nginx的配置文件中,需要添加一段HTTP的配置,使得用戶訪問HTTP默認端口80時,能夠自動跳轉到HTTPS的默認端口443上。
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
(2)Nginx證書配置
在Nginx的配置文件中,需要將剛剛申請的SSL證書和私鑰文件添加到配置文件中。
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/cert.crt;
ssl_certificate_key /path/to/cert.key;
...
}
(3)HTTPS配置
需要配置HTTPS協議的具體選項,例如啟用HTTP/2協議、禁用SSLv3等。
http2_push_preload on; #啟用HTTP/2協議的推送預加載
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #指定啟用的TLS協議版本
ssl_ciphers EECDH+AESGCM:EDH+AESGCM:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM; #指定加密套件
ssl_prefer_server_ciphers on; #常用加密套件優先順序為服務端指定的值
ssl_session_cache shared:SSL:10m; #指定SSL session緩存
ssl_session_timeout 10m; #指定SSL session超時時間
二、Nginx的安全性能優化
在進行HTTPS服務的部署后,還需要注意以下安全性能優化方面的問題,以確保服務的穩定和安全:
檢測OCSP響應
OCSP(在線證書狀態協議)用于檢測證書是否已經被廢除。在Nginx的HTTPS配置中,可以通過以下程序進行OCSP響應檢測:
ssl_stapling on;
ssl_stapling_verify on;
ssl_tRusted_certificate /path/to/fullchAIn.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 10s;
其中關鍵點解讀如下:
- ssl_stapling on 開啟OCSP響應
- ssl_stapling_verify on 開啟OCSP響應驗證
- ssl_trusted_certificate /path/to/fullchain.pem 配置證書鏈
- resolver 8.8.8.8 8.8.4.4 valid=300s 配置DNS解析器
- resolver_timeout 10s 配置DNS解析時間
DNS解析器需要配置成公認的可信解析器,這里配置成google公共DNS。
啟用HSTS
HSTS(HTTP嚴格傳輸安全)防止用戶被劫持到HTTP頁面,從而提高安全級別。在Nginx的HTTPS配置中,可以像下面這樣開啟HSTS:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
其中關鍵點解讀如下:
- max-age=31536000 定義HSTS頭的持續時間
- includeSubDomains 啟用所有子域名
啟用安全協議
默認情況下,Nginx只啟用了TLSv1和TLSv1.2,如果需要啟用其他的加密協議,可以通過以下方式配置:
ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
其中關鍵點解讀如下:
- TLSv1.3 定義啟用的加密協議
啟用Hmac密鑰算法
通過HTTPS傳輸的數據,需要使用密鑰來加密數據,使用HMAC (Hash-based message authentication code)可以提升數據傳輸時的安全性。在Nginx配置文件中啟用HMAC的方法如下:
ssl_ciphers ... !aNULL !eNULL !EXPORT !CAMELLIA !DES !MD5 !PSK !RC4 !SEED +AES256 !kEDH +SHA256 +HMAC;
其中關鍵點解讀如下:
- AES256 啟用AES256加密算法
- +SHA256 啟用SHA256哈希函數
- +HMAC 啟用HMAC密鑰算法