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訪問