Nginx如何設定HTTPS詳解

2023-03-07 18:00:34

1. 什麼是HTTPS?

HTTPS(全稱:Hypertext Transfer Protocol Secure),是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS在HTTP的基礎下加入SSL,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。HTTPS存在不同於HTTP的預設埠及一個加密/身份驗證層(在HTTP與TCP之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用於全球資訊網上安全敏感的通訊,例如交易支付等方面 。

1.1 HTTPS好處

  • 使用 HTTPS 協定可認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;
  • HTTPS 協定是由 SSL+HTTP構建的可進行加密傳輸、身份認證的網路協定,要比 HTTP安全,可防止資料在傳輸過程中被竊取、改變,確保資料的完整性。
  • HTTPS 是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本;

1.2 HTTPS缺點

  • 相同網路環境下,HTTPS 協定會使頁面的載入時間延長近 50%,增加10%到20%的耗電。此外,HTTPS 協定還會影響快取,增加資料開銷和功耗
  • HTTPS 協定的安全是有範圍的,在駭客攻擊、拒絕服務攻擊和伺服器劫持等方面幾乎起不到什麼作用,最關鍵的是,SSL證書的信用鏈體系並不安全。特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行;
  • 成本增加。部署HTTPS後,因為HTTPS 協定的工作要增加額外的計算資源消耗,例如 SSL 協定加密演演算法和 SSL互動次數將佔用一定的計算資源和伺服器成本。在大規模使用者存取應用的場景下,伺服器需要頻繁地做加密和解密操作,幾乎每一個位元組都需要做加解密,這就產生了伺服器成本。隨著雲端計算技術的發展,資料中心部署的伺服器使用成本在規模增加後逐步下降,相對於使用者存取的安全提升,其投入成本已經下降到可接受程度。

2. Nginx設定HTTPS

2.1 申請SSL證書

可以去申請阿里雲免費CA證書 https://www.aliyun.com/product/cas
騰訊雲: https://cloud.tencent.com/product/ssl

2.2 申請騰訊雲免費證書

這裡已經提前申請下來了。直接在騰訊雲下載即可。

2.3 在伺服器端解壓

[root@haitang-nginx-test tls]# ls
nginx.malusspectabilis.top_nginx.zip
[root@haitang-nginx-test tls]# unzip nginx.malusspectabilis.top_nginx.zip 
Archive:  nginx.malusspectabilis.top_nginx.zip
   creating: nginx.malusspectabilis.top_nginx/
  inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top.csr  
  inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top_bundle.crt  
  inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top_bundle.pem  
  inflating: nginx.malusspectabilis.top_nginx/nginx.malusspectabilis.top.key  

2.4 設定HTTPS

具體可參考官方檔案;https://nginx.org/en/docs/http/ngx_http_ssl_module.html
設定https功能基於模組ngx_http_ssl_module,編譯安裝需安裝這個模組開啟ssl功能。yum安裝的nginx預設是開啟這個模組ngx_http_ssl_module。

[root@haitang-nginx-test conf.d]# cat haitang-https.conf 
server{
   listen 443 ssl;  是否啟用ssl功能
   charset utf-8;   字元集utf-8
   server_name nginx.malusspectabilis.top;   域名
   ssl_session_timeout 5m;  使用者端連線可複用ssl 快取有效時間
   ssl_certificate /apps/nginx/conf.d/tls/nginx-malusspectabilis.top/nginx.malusspectabilis.top_bundle.pem;  當前虛擬主機的CA證書資訊,一般是Crt檔案
   ssl_certificate_key /apps/nginx/conf.d/tls/nginx-malusspectabilis.top/nginx.malusspectabilis.top.key;  當前虛擬主機的私鑰檔案,一般為key檔案
   ssl_session_cache shared:sslcache:20m;    設定ssl快取
   ssl_protocols TLSv1.2 TLSv1.3;   支援的ssl協定版本,早期為ssl現在為tls;
   location / {
     root "/data/nginx/html/haitang/";
}
}
語法檢查正常。
[root@haitang-nginx-test conf.d]# nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful

2.5 準備存取頁面

[root@haitang-nginx-test ~]# echo "海棠"  > /data/nginx/html/haitang/index.html 

2.6 載入Nginx並檢查埠是否啟動

[root@haitang-nginx-test ~]# nginx -s reload 
[root@haitang-nginx-test conf.d]# ss -tnlp | grep 443
LISTEN     0      128          *:443                      *:*                   users:(("nginx",pid=1802,fd=7),("nginx",pid=1801,fd=7),("nginx",pid=1800,fd=7),("nginx",pid=1799,fd=7),("nginx",pid=1798,fd=7),("nginx",pid=1761,fd=7))

2.7 設定本地hosts解析

sh-3.2# echo "xxxxxxx nginx.malusspectabilis.top" >> /etc/hosts

2.8 測試是否是https存取