Nginx高階之HTTPS服務
高階階段回顧:
Nginx高階之高階模組(secure_link/secure_link_md5/geoip_module)
HTTPS原理
HTTPS協議較為安全的原因就是對資料進行了加密傳輸.
兩種加密方式:
① 對稱加密: 加密金鑰和解密金鑰是一樣的
② 非對稱加密: 加密金鑰和解密金鑰是不一樣的(分為公鑰和私鑰)
HTTPS協議同時用到了這兩種加密方式:
中間人偽裝成客戶端或者服務端劫持:
注: HTTPS之所以安全性高, 在於它能夠生成CA簽名證書, 該證書確保中間人無法獲取到該證書, 所以提高了資料傳輸的安全性.
生成金鑰和CA證書
準備工作: 確認已經安裝nginx和openssl
安裝nginx請參考我的nginx系列第一篇: Nginx基礎之簡介與快速安裝
yum安裝openssl: yum install openssl 和 yum install openssl openssl-devel
確認是否已安裝:
步驟一: 生成RSA金鑰
生成金鑰命令: openssl genrsa -idea -out [金鑰檔名稱] 1024
在這個過程中需要輸入密碼(自定義, 但需要記住, 下面的步驟需要提示輸入該密碼)
步驟二: 生成證書籤名請求檔案(CSR檔案)
生成CSR檔案命令: openssl req -new -key [金鑰檔名稱] -out [CSR檔名稱]
輸入相關資訊即可:
步驟三: 生成證書籤名檔案(CA檔案)
生成簽名檔案命令: openssl x509 -req -days 3650 -in [CSR檔名稱] -signkey [金鑰檔名稱] -out [生成的CRT檔名稱]
配置HTTPS服務
是否開啟服務端的相應:
systax: ssl on | off;
default: ssl off;
context: http域/server域
ssl的證書檔案
systax: ssl_certificate file;
default: 無配置
context: http域/server域
ssl的證書密碼檔案
systax: ssl_certificate_key file;
default: 無配置
context: http域/server域
進入default.conf檔案進行配置: https協議的預設埠時443
配置蘋果要求的證書
準備工作:
① 伺服器所有的連線使用TLS1.2以上的版本(openssl 1.0.2)
② HTTPS證書必須使用SHA256以上雜湊演算法簽名
③ HTTPS證書必須使用RSA 2048位或ECC 256位以上公鑰演算法
④ 使用前向加密技術
升級openssl:
檢視openssl的版本命令: openssl + version
如果需要升級, 請按下面的步驟:
cd /opt/opensslDownload
wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz
tar -zxvf openssl-1.0.2k.tar.gz
cd openssl-1.0.2k
./config --prefix=/usr/local/openssl
make && make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/openssl/include/openssl /usr/include/openssl
echo "/usr/local/openssl/lib" >>/etc/ld.so.conf
ldconfig -v
openssl version -a
將以上程式碼寫入一個.sh的檔案, 執行該檔案 sh ./[.sh檔案的檔名稱]
結果:
由key金鑰直接生成CRT簽名:
命令: openssl req -days 3650 -x509 -sha256 -nodes -newkey rsa:2048 -keyout [金鑰檔名稱] -out [生成的CRT檔名稱]
進入default.conf配置:
引用New-Milky-Way.crt檔案
重啟nginx: 訪問https://ip/
注: 是使用https://訪問而不是http://訪問.
HTTPS服務的優化
① 啟用keepalive長連線
② 設定ssl session快取
default.conf的配置: