1. 程式人生 > >https、ssl、tls協議學習

https、ssl、tls協議學習

一、知識準備

1.ssl協議:通過認證、數字簽名確保完整性;使用加密確保私密性;確保客戶端和伺服器之間的通訊安全
2.tls協議:在SSL的基礎上新增了諸多的功能,它們之間協議工作方式一樣
3.https協議:https over tls,tls協議是https協議的核心

名詞介紹:
CA:Certificate Authority,也稱為電子商務認證中心,是負責發放和管理數字證書的權威機構
對稱加密:加密和解密使用相同金鑰的加密演算法。它的速度快,通常在加密大量資料時使用
非對稱加密:需要兩個金鑰來進行加密和解密,公鑰與私鑰。公鑰加密的只能用私鑰解密,反之私鑰加密的也只能用公鑰解密。通常用於重要資訊的安全傳輸,缺點是速度比對稱加密慢很多

 

二、tls通訊過程

廢話不說,我們先上tls通訊過程

(1)客戶端-->服務端:協商協議版本、加密方案、壓縮方法等;生成一個隨機數,用於之後生成會話祕鑰
(2)服務端-->客戶端:確認協商資訊;生成一個隨機數,用於之後生成會話祕鑰;傳送證書到客戶端
(3)客戶端-->服務端:生成一個隨機數,用於之後生成會話祕鑰;驗證自己收到的證書是否為合法的證書;若證書沒問題,則會從證書中取出公鑰,加密最後一個隨機數傳送給服務端;然後使用產生的3個隨機數生成會話祕鑰,並且宣佈用會話祕鑰來進行加密通訊(會話祕鑰是對稱加密)
(4)服務端:收到被公鑰加密的最後的隨機數,然後用私鑰解開之後再加上之前的2個隨機數,產生會話祕鑰
(5)至此,雙方都已經擁有會話祕鑰,並且用該會話祕鑰進行隨後的加密通訊

這就是整個通訊過程,本文結束了嗎?顯然沒有,我們還有幾個問題沒有解決

 

三、tls通訊中需要解決的問題

(a)客戶端從服務端收到的證書,是真實的證書,還是黑客偽裝的證書
(b)私鑰是不能公佈的,公鑰是釋出出去大家都知道的,那用什麼祕鑰去加密

下面我們來一一解決這些問題:

問題(a)

要說清楚客戶端怎麼驗證證書,要先弄明白證書是什麼

● 證書內容:如發行機構、有效期、公司資訊等  
● 摘要:證書內容等經過hash之後生成摘要  
● 數字簽名:CA使用私鑰對摘要,加密之後生成簽名  
● 數字證書主要由證書內容、公鑰、數字簽名、使用的hash演算法等組成  

證書驗證分為真實性驗證與有效性驗證:

真實性驗證:
● 通過內建根證書的公鑰對數字簽名解密,得到一個hash值,這個hash值就是摘要
● 使用證書內的hash演算法將證書內容進行hash之後得到一個hash值,用這個新的hash值與上一步的hash值進行對比
● 若相同,證明證書真實有效,若不同,則證明被串改過
有效性驗證:
● CRL。CA會提供一份證書失效名單,瀏覽器會快取並定期更新該名單。
● OCSP。CA提供實時介面查詢

還有個問題需要解釋一下:

關於數字簽名中,CA使用的私鑰的問題

● CA也會生成一對私鑰、公鑰,私鑰對使用者證書進行加密
● 而公鑰會內建在作業系統的安裝當中成為系統預設的根證書
● 在真實性驗證中,客戶端使用內建根證書中的公鑰對使用者的證書進行解密

至此,關於證書驗證的問題大致描述到此

問題(b)

完成證書驗證之後

● 在tls通訊過程中(1)、(2)分別生成了2個隨機數,這兩個隨機數是沒有加密傳遞
● 在tls通訊過程中(3)又生成了1個隨機數,這個隨機數會被公鑰加密之後,只能被服務端的私鑰解密
● 所以,第三個隨機數是安全的,沒有被洩露的,通過這3個隨機數使用對稱加密演算法生成會話祕鑰
● 之後的資料傳輸都會使用會話祕鑰進行加密
● 由於會話祕鑰是對稱加密,它的加密解密速度都大大超過非對稱祕鑰

 

四、自籤根證書測試

自籤根證書的帖子網上的大神很多,我就不班門弄斧了

經過一頓猛如虎的操作之後,我手裡面拿到了這幾個檔案:

[email protected]:/opt/CA/certs# ls -l
total 20
-rw-r--r-- 1 root root 1448 Oct 26 10:14 ca.crt
-rw------- 1 root root 1854 Oct 26 10:14 ca.key
-rw-r--r-- 1 root root 4493 Oct 26 10:14 server.crt
-rw------- 1 root root 1675 Oct 26 10:14 server.key
ca.crt:自籤的根證書
ca.key:根證書對應的私鑰
server.crt:伺服器證書
server.key:伺服器證書對應的私鑰

我們部署一個nginx,並且配置ssl

server {
   listen   443 ssl;
   server_name www.mrvolleyball.com;

   ssl_certificate /etc/nginx/cert/server.crt;
   ssl_certificate_key  /etc/nginx/cert/server.key;

   location / {
       root html;
   }
}

首先來訪問一下nginx:

不出所料,證書是不受信任的,接下來我們在系統中信任自籤的根證書


再次開啟

 


至此,本文結束
在下才疏學淺,有撒湯漏水的,請各位不吝賜教...

鄭州市不孕不育醫院

鄭州哪個醫院治療不孕不育好

鄭州不孕不育哪家好

鄭州不孕不育