HTTPS認證一:認證原理

HTTP超文本傳輸協議用於在web瀏覽器和網站服務器之間傳遞信息,有以下缺點:

1、通信使用明文,內容可能被竊聽

2、不驗證對方的身份

3、無法驗證報文的完整性

所以HTTPS就來了,其中S代表SSL或者TLS,就是在原來HTTP的基礎上加上一層用於數據加密、解密、身份認證的安全層,所以:

HTTP+加密+認證+完整性保護 = HTTPS

加密:

對稱加密:加密和解密使用同一個密鑰,特點時速度快,效率高,常見算法AES

非對稱加密:加密和解密使用不同的密鑰,分別叫私鑰和公鑰,數據使用私鑰加密後必須使用公鑰解密;使用公鑰加密後必須使用私鑰解密。

一般來說私鑰自己保存好,公鑰發佈出去,這種方式的缺點是速度慢,常見的是RSA算法,一般用於交換對稱加密的密碼。

 

CA證書

CA證書是由CA機構發佈的數字證書,內容包括電子簽證機關的信息、公鑰用戶信息、公鑰、簽名和有效期:

證書 = 公鑰 + 簽名 + 申請者和頒發者的信息

 

HTTPS單向認證過程:

後面文章會講到部署方法,部署時候會在服務端放服務器的證書server.crt(包含公鑰)和私鑰server.key,其中server.crt是通過CA機構頒發的,頒發時會有認證機構的根證書ca.crt;

會在客戶端放CA的根證書ca.crt用來校驗服務端的證書。

(1)客戶端發起HTTPS請求,將SSL協議版本的信息發送給服務端。

(2)服務端CA證書server.crt發送給客戶端

(3)客戶端讀取CA證書的明文信息,採用相同的hash散列函數計算得到信息摘要,然後用CA的公鑰去解密簽名(因爲簽名是用CA的私鑰加密的),對比證書中的信息摘要。如果一致,則證明證書是可信的,然後取出了服務端公鑰。

(4)客戶端生成一個隨機數(密鑰F),用剛纔等到的服務端公鑰去加密這個隨機數形成密文,發送給服務端。

(5)服務端用自己的私鑰去解密這個密文,得到了密鑰F

(6)服務端和客戶端在後續通訊過程中就使用這個密鑰F進行通信了。和之前的非對稱加密不同,這裏開始就是一種對稱加密的方式

 

HTTPS雙向認證

部署時候會在服務器中存放server.crt, server.key, ca.crt(用來驗證客戶端身份)

客戶端會存放client.crt, client.key, ca.crt

 

雙向認證和單向認證差不多,多了一步服務器驗證客戶端的身份:

(1)客戶端發起HTTPS請求,將SSL協議版本的信息發送給服務端。

(2)服務端CA證書server.crt發送給客戶端

(3)客戶端讀取CA證書的明文信息,採用相同的hash散列函數計算得到信息摘要,然後用CA的公鑰去解密簽名(因爲簽名是用CA的私鑰加密的),對比證書中的信息摘要。如果一致,則證明證書是可信的,然後取出了服務端公鑰。

(4)客戶端發送自己的客戶端證書client.crt(包含客戶端公鑰),並告知支持的加密方式

(5)服務器收到client.crt後驗證,驗證通過後得到公鑰,通過公鑰加密選擇的加密方式告知客戶端

(6)客戶端收到加密方式後,使用私鑰解密,並生成一個隨機數(密鑰F),用服務端公鑰去加密這個隨機數形成密文,發送給服務端。

(7)服務端用自己的私鑰去解密這個密文,得到了密鑰F

(8)服務端和客戶端在後續通訊過程中就使用這個密鑰F進行通信了。和之前的非對稱加密不同,這裏開始就是一種對稱加密的方式

HTTPS認證二: openssl生成證書及簽名 :https://blog.csdn.net/egbert123/article/details/103831808

HTTPS認證三:用docker搭建nginx https服務器https://blog.csdn.net/egbert123/article/details/103832083

HTTPS認證四:使用開源libcurl進行SSL雙向認證https://blog.csdn.net/egbert123/article/details/103832664

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章