有HTTP了,為什么需要HTTPS
主要原因是HTTP數(shù)據(jù)傳輸時沒有對數(shù)據(jù)進(jìn)行加密,所以導(dǎo)致數(shù)據(jù)不安全。而HTTPS在HTTP上加了一層,對數(shù)據(jù)進(jìn)行加密,這樣就保證了數(shù)據(jù)的安全性。防止傳輸?shù)臄?shù)據(jù)過程中被不法分子盜用、劫持、篡改,而導(dǎo)致數(shù)據(jù)信息的泄露。
HTTPS協(xié)議的實(shí)現(xiàn)
對傳輸內(nèi)容進(jìn)行加密以及身份驗(yàn)證
- 對稱加密:加密秘鑰和解密秘鑰是一樣的
- 非對稱加密:加密密鑰與解密密鑰是不一樣的,但是是成對的。
- HTTPS加密協(xié)議原理
中間人偽造客戶端和服務(wù)端:(中間人可以偽裝成客戶端和服務(wù)端,中間人可以對數(shù)據(jù)進(jìn)行劫持,不安全)
HTTPS的CA簽名證書:(服務(wù)端和客戶端通過實(shí)現(xiàn)約定好的證書進(jìn)行認(rèn)證,都會對證書進(jìn)行校驗(yàn),所以中間人沒法劫持?jǐn)?shù)據(jù),故安全)
0x01:先驗(yàn)證Nginx安裝情況
在【Nginx系列:Nginx源碼安裝】 文章中,知道安裝Nginx時,必須首先安裝openssl openssl-devel依賴 模塊,而這兩個模塊就是HTTPS需要用戶的類庫;所以毫無疑問安裝Nginx時,linux系統(tǒng)肯定安裝了這兩個模塊;
Nginx的https需要安裝with-stream_ssl_preread_module目錄,在nginx的源碼目錄執(zhí)行以下命令,可以看出nginx默認(rèn)并不會安裝stream_ssl_preread_module模塊的,需要重新編譯安裝一下
cat auto/options | grep YES | grep ssl
安裝一下stream_ssl_preread_module模塊
./configure --prefix=/usr/local/nginx --user=nginx
--group=nginx --with-http_secure_link_module
--with-http_stub_status_module --with-stream_ssl_preread_module
--with-http_ssl_modulemake
cd objs/mv nginx /usr/local/nginx/sbin/
0x02:生成秘鑰和CA證書
- 生成key秘鑰
先進(jìn)入Nginx的安裝目錄,然后生成一個目錄,存放密鑰和CA證書
cd /usr/local/nginx/conf/
mkdir httpsKeyscd httpsKeys
先看下openssl命令的基本用法
基本語法:
openssl genrsa [args] [numbits]
說明:args1 對生成的私鑰文件是否要使用加密算法進(jìn)行對稱加密:
-des : CBC模式的DES加密
-des3 : CBC模式的3DES加密
-aes128 : CBC模式的AES128加密
-aes192 : CBC模式的AES192加密
-aes256 : CBC模式的AES256加密
args2 對稱加密密碼
-passout passwords
其中passwords為對稱加密(des、3des、aes)的密碼(使用這個參數(shù)就省去了console交互提示輸入密碼的環(huán)節(jié))
args3 輸出文件
-out file : 輸出證書私鑰文件
[numbits]: 密鑰長度,理解為私鑰長度
使用如下命令生成key秘鑰
openssl genrsa -idea -out jesonc.key 2048
執(zhí)行以上命令需要輸入密鑰key的密碼,這里使用密碼:admin,最終在當(dāng)前目錄生成一個jesonc.key的密鑰文件。
- 生成證書簽名請求文件(csr文件)
根據(jù)密鑰文件jesonc.key生成證書簽名請求文件jesonc.csr
openssl req -new -key jesonc.key -out jesonc.csr
執(zhí)行命令的過程中需要根據(jù)提示輸入一些相關(guān)的信息,最終會在當(dāng)前目錄生成jesonc.csr文件。
- 生成證書簽名文件(CA文件)
生成證書簽名文件(CA文件),有效期設(shè)置為10年,這個有效期根據(jù)自己的要求設(shè)置。
openssl x509 -req -days 3650 -in jesonc.csr
-signkey jesonc.key -out jesonc.crt
0x03:nginx配置https
Nginx配置HTTPS的基本語法如下
ssl開關(guān):
配置語法:listen 443 ssl; # 1.1版本后這樣寫
ssl證書文件
配置語法:ssl_certificate file;
默認(rèn)狀態(tài):-配置方法:http、server
ssl密碼文件
配置語法:ssl_certificate_key file;
默認(rèn)狀態(tài):ssl off;
配置方法:http、server
在server模塊添加如下配置
listen 443 ssl;
server_name localhost;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_certificate /usr/local/nginx/conf/httpsKeys/jesonc.crt; # 證書路徑
ssl_certificate_key /usr/local/nginx/conf/httpsKeys/jesonc.key; # 請求認(rèn)證 key 的路徑
啟動Nginx
啟動Nginx時需要輸入密碼,這時因?yàn)?strong>生成證書簽名請求文件(csr文件)在A challenge password時我輸入了密碼。這個密碼可以不輸入。
驗(yàn)證是否可以訪問,雖然目前自簽名的證書已經(jīng)不能使用;但是nginx的HTTPS大致是這樣配置的。