一,TLS/SSL發(fā)展和相關(guān)概念
- SSL:(Secure Socket Layer,安全套接字層),位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議和應(yīng)用層協(xié)議之間的一種協(xié)議層。SSL通過互相認(rèn)證、使用數(shù)字簽名確保完整性、使用加密確保私密性,以實現(xiàn)客戶端和服務(wù)器之間的安全通訊。該協(xié)議由兩層組成:SSL記錄協(xié)議和SSL握手協(xié)議。
- TLS:(Transport Layer Security,傳輸層安全協(xié)議),用于兩個應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。該協(xié)議由兩層組成:TLS記錄協(xié)議和TLS握手協(xié)議。
SSL和TLS都屬于加密協(xié)議。在其網(wǎng)絡(luò)數(shù)據(jù)傳輸中起到保護(hù)隱私和數(shù)據(jù)的完整性。保證該網(wǎng)絡(luò)傳輸?shù)男畔⒉粫晃唇?jīng)授權(quán)的元素攔截或修改,從而確保只有合法的發(fā)送者和接收者才能完全訪問并傳輸信息。
根據(jù)分層架構(gòu)模型(OSI),主要用于應(yīng)用層和傳輸層的SSL協(xié)議,應(yīng)用最廣的是HTTP協(xié)議,從而產(chǎn)生了HTTPS協(xié)議。保障在網(wǎng)站和用戶之間(雙向)傳輸?shù)男畔⑹前踩?,在涉及敏感信息時尤為重要:機密數(shù)據(jù),密碼,銀行信息,個人圖像等。
二,SSL/TLS通用模型
2.1,對稱加密和非對稱加密
這兩種加密方式是TLS/SSL的用到的兩種加密方式。
2.2,SSL證書的公信力是如何保證的
通過CA機構(gòu)頒發(fā)證書。
2.3,PKI公鑰基礎(chǔ)設(shè)施

PKI公鑰基礎(chǔ)設(shè)施.png
2.4,CA證書
- 域名驗證(domain validated,DV)證書
這個證書只會去驗證域名的歸屬是否正確,比如我們申請證書的時候,只要你的域名指向的是你正在申請證書的那臺服務(wù)器,你就可以成功地申請到證書,如果你使用其他CA機構(gòu)頒發(fā)的證書,可能會去驗證你注冊的那個郵箱是否正確 - 組織驗證(organization validated,OV)證書
我們在申請證書的時候,會去驗證我們填寫的機構(gòu),企業(yè)名稱是否是正確的,所以O(shè)V證書的申請往往需要幾天的時間,不像DVz證書基本上實時就可以獲取到了,而OV證書的價格也往往高于DV證書,DV證書很多都是免費的 - 擴(kuò)展驗證(extended validation,EV)證書
比OV證書驗證更加嚴(yán)格,所以大部分的瀏覽器符EV證書的顯示非常的友好,它會把我們申請證書時,所填寫的機構(gòu)名稱在瀏覽器的地址的最左側(cè)顯示出來
2.5,SSL證書功能
1,幫助客戶端對服務(wù)端進(jìn)行驗證。
2,保證服務(wù)器和客戶端之間的通信安全。
3,加密用戶的敏感信息確保安全。
4,提升用戶對網(wǎng)站的信息。
2.6 協(xié)議模型
- 第一步(雙方協(xié)商交換參數(shù))
- 客戶端產(chǎn)生隨機數(shù)RNC(Random Number of Client)。
- 客戶端發(fā)送客戶端的證書,協(xié)議(SSL/TLS),算法信息,RNC給服務(wù)器。
- 服務(wù)端回復(fù)服務(wù)器的證書,協(xié)議(SSL/TLS),算法信息,RNS(Random Number of Server)給客戶。
- 第二步(客戶端/服務(wù)端向認(rèn)證機構(gòu)校驗證書信息)
- 客戶端向第三方/本地信任庫認(rèn)證接收到的服務(wù)器證書信息。
- 服務(wù)端向第三方/本地信任庫認(rèn)證接收到的服務(wù)器證書信息。
- 第三步(生成主秘鑰Primary Master Secret)
- 客戶端生成隨機數(shù)PMS。
- 客戶端根據(jù)協(xié)議(SSL/TLS),服務(wù)器的證書公鑰生成加密過的PMS。
- 客戶端將加密過的PMS發(fā)送給服務(wù)端。
- 服務(wù)端接收到客戶端發(fā)送過來的加密過的PMS,并根據(jù)自己的私鑰解密出PMS。
- 客戶端與服務(wù)端保存公共私鑰(RNC_RNS_PMS)作為共同的私鑰。
- 第四步 (會話秘鑰確認(rèn))
- 客戶端通過PMS產(chǎn)生會話密鑰
- 客戶端數(shù)據(jù)使用會話秘鑰加密發(fā)送給服務(wù)器。
- 服務(wù)器使用PMS產(chǎn)生對應(yīng)的密鑰。
- 服務(wù)使用會話密鑰解密接收到的數(shù)據(jù)。
- 服務(wù)器發(fā)送確認(rèn)信息給客戶端。
- 終止握手。
- 第五步(正式會話):
- 客戶端數(shù)據(jù)使用會話密鑰加密 發(fā)送給服務(wù)端.
- 服務(wù)端接收數(shù)據(jù)使用相同的會話密鑰解密出數(shù)據(jù).
- 服務(wù)器使用會話密鑰加密數(shù)據(jù)發(fā)送給客戶端
- 客戶端使用會話密鑰解密出對應(yīng)數(shù)據(jù).
這個部分一個詳細(xì)的介紹HTTPS 的概念、原理及工作機制
三,SSL握手過程
證書主要是用于握手過程中。
1,客戶端提交https請求。
2,服務(wù)器響應(yīng)客戶,并把證書和公鑰發(fā)給客戶端。
3,客戶端驗證證書和公鑰的有效性。
4,有效后,生成一個會話秘鑰。
5,客戶端用公鑰加密會話后,發(fā)給服務(wù)器。
6,服務(wù)器收到公鑰加密的報文后用私鑰解密?;厝捗罔€。
7,客戶端和服務(wù)端用這個會話秘鑰通信。
四,nginx配置SSL的方法和步驟
主要步驟:
- SSL模塊安裝。
在配置ssl證書之前,要確保你的nginx已經(jīng)安裝了ssl模塊,一般情況下自己安裝的nginx都是不存在ssl模塊的。使用nginx -V查看
root@iZbp19tzbfkht2jgiwxh2eZ:/usr/nginx/sbin# ./nginx -V
nginx version: nginx/1.19.6
built by gcc 9.3.0 (Ubuntu 9.3.0-17ubuntu1~20.04)
configure arguments: --prefix=/usr/nginx
如果出現(xiàn) (configure arguments: --with-http_ssl_module), 則已安裝
一般情況下都是不存在ssl模塊的,接下來進(jìn)入到你的解壓縮后的nginx目錄,注意這里不是nginx安裝目錄,是解壓縮后的目錄,我的是在(/root/nginx),進(jìn)入目錄后,輸入
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
接下來執(zhí)行
make
#切記不要執(zhí)行make install,否則會重新安裝nginx
上述操作執(zhí)行完成以后,你的目錄下會出現(xiàn)objs文件夾,文件夾內(nèi)存在nginx文件:
root@iZbp19tzbfkht2jgiwxh2eZ:/home/nginx/nginx-1.19.6# ll
total 816
drwxr-xr-x 9 1001 1001 4096 Mar 7 15:37 ./
drwxr-xr-x 4 root root 4096 Jan 21 11:24 ../
drwxr-xr-x 6 1001 1001 4096 Jan 21 11:23 auto/
-rw-r--r-- 1 1001 1001 308054 Dec 15 22:41 CHANGES
-rw-r--r-- 1 1001 1001 470256 Dec 15 22:41 CHANGES.ru
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 conf/
-rwxr-xr-x 1 1001 1001 2590 Dec 15 22:41 configure*
drwxr-xr-x 4 1001 1001 4096 Jan 21 11:23 contrib/
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 html/
-rw-r--r-- 1 1001 1001 1397 Dec 15 22:41 LICENSE
-rw-r--r-- 1 root root 352 Mar 7 15:37 Makefile
drwxr-xr-x 2 1001 1001 4096 Jan 21 11:23 man/
drwxr-xr-x 3 root root 4096 Mar 7 15:38 objs/
-rw-r--r-- 1 1001 1001 49 Dec 15 22:41 README
drwxr-xr-x 9 1001 1001 4096 Jan 21 11:23 src/
接下來使用新的nginx文件替換掉之前安裝目錄sbin下的nginx,注意這里的替換的時候可以先將之前的文件備份下,停掉nginx服務(wù)
./nginx -s stop #停止nginx服務(wù)
#替換之前的nginx
cp /home/nginx/nginx-1.19.6objs/nginx /usr/nginx/sbin
成功之后,進(jìn)入到nginx安裝目錄下,查看ssl時候成功
#注意這里是大寫的V,小寫的只顯示版本號
./nginx -V
#可以看到這里出現(xiàn)了configure arguments: --with-http_ssl_module 證明已經(jīng)安裝成功