HTTPS加密解密那些方案記錄

衆所周知:

Http1.0主要是無狀態無連接,瀏覽器每次請求都要與服務器創建TCP連接,就要三次握手四次揮手,處理完就斷開。所謂無狀態就是服務器不跟蹤客戶端也不記錄請求。
http1.1 連接方式從1.0的close變成了keep-alive 持久連接。避免連接建立和釋放的開銷,服務器必須按照客戶端請求的先後順序回送結果。
不允許同時存在兩個並行的響應。
http2.0:二進制分幀和多路複用。

HTTPS

可以理解爲HTTP+SSL/TLS
在HTTP與TCP之間多加了一層SSL或TLS。達到安全的目的。

如果想理解加密策略要一步一步來

1.對稱加密方案

一套祕鑰,和數據一起發送,然後接受方直接使用祕鑰進行解密。
流程是:
①客戶端生成祕鑰
②祕鑰加密數據
③客戶端發送數據+祕鑰
④服務端接收後,利用祕鑰解密數據。

特點:速度快,不太耗費資源。
問題:就很不安全!中間數據被截獲,直接就順手用密鑰破解了。

2.非對稱加密方案

公開密鑰加密,用一對非對稱的密鑰。服務端持有一把私鑰,一把公鑰,公鑰可以公開發布給多個客戶端。客戶端使用得到的公鑰進行數據加密,發送數據給服務端,服務端使用私鑰解密。

整個流程就是:
①服務端持有公鑰、私鑰
②客戶端請求公鑰
③服務端返回公鑰給客戶端
④客戶端使用 公鑰加密數據
⑤發送數據
⑥服務端使用私鑰解密數據

特點:安全,沒有私鑰,就算劫持了數據也無法進行解密。
問題:耗費資源,用戶體驗不好,一般不會使用。

3.對稱非對稱加密相結合的方案

服務端依然持有公鑰和私鑰。不過客戶端請求到公鑰之後,會對應公鑰生成一個祕鑰,並用這個祕鑰去加密數據。然後使用公鑰加密生成的祕鑰。再把加密後的數據和加密後的祕鑰發送給服務端。此時,服務端使用私鑰解密得到祕鑰,再通過這個祕鑰去解密數據。

整個流程:
①服務端持有公鑰A,私鑰A
②客戶端請求公鑰
③服務器返回公鑰A給客戶端
④客戶端生成對稱祕鑰B
⑤祕鑰B加密數據,然後公鑰A加密祕鑰B
⑥發送數據和祕鑰B
⑦服務端使用私鑰A解密得到了祕鑰B,然後通過祕鑰B解密數據,得到數據。

看到這裏,有人就會疑問,這不是更費勁了嗎?實則不然,如果我們只使用非對稱的話,每次請求我們都要進行非對稱的加密解密。但是如果我們採用這種方式,我們只需要在第一次客戶端請求的時候使用非對稱加密,當服務端拿到了客戶端的祕鑰之後,就不需要再去非對稱獲取了。

看了上面的感覺安全了嗎?實則不然,存在箇中間人攻擊。

中間人攻擊

這個圖就展示了中間人攻擊。通過這個中間人,就可以瞭解信息,並進行操作的竊聽和篡改。並且服務器可以說消息不是自己發出的。

那麼怎辦???
此時傳說中的大家都知道的證書要出場了!!!

爲了避免中間人攻擊,客戶端需要確保拿到的公鑰的確是你服務器的,這個公鑰不能被僞造。那麼證書的意義就有了,證書裏面包括了網站地址,加密公鑰和證書的頒發機構,客戶端獲取證書之後先驗證證書的的有效性,包括了證書的有效期和頒發機構之類的。

HTTPS採用的就是,通過服務端證書和對稱非對稱相結合的方案。第一次處理會慢一些,後續會比較快。

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