全面梳理HTTPS ,值得你看

HTTPS爲什麼會出現

由於HTTP是明文傳輸,在傳輸的過程中,任何人都可能從中截獲、修改或者僞造數據;其次是不會驗證通信雙方身份的;最後,通信雙方是不會驗證報文的完整性的。爲了解決這些問題HTTPS就誕生了。

什麼是HTPPS

HTTPS完善了HTTP協議,彌補了HTTP協議的缺陷。它不是新的協議,只是HTTP的通信接口被SSL或者TLS協議替代了。使用SSLTLS來進行通信加密。可以說HTTPS是身披SSL外殼的HTTP。

在這裏插入圖片描述

HTTPS做了什麼?

  • 加密: 對傳輸的數據進行加密,防止被竊聽。
  • 數據一致性: 用戶發送的數據會被完整的傳輸到服務器上,不會被篡改。
  • 身份認證: 確認對方身份。

HTTPS端口號443,HTTPS如何做到安全性的,關鍵在於SSSL/TLS。

什麼是SSL/TLS

  • HTTP協議使用SSL協議之後,就具有加密認證數據準確性的功能。任何應用層的協議(比如SMTP電子郵件協議、TeInet遠程登錄協議等)都可以使用SSL協議進行加密。而TLS是以SSL爲原型的一種協議
  • SSL(安全套接層),屬於OSI七層模型中的第5層(會話層)。SSL在1999年被更名爲TLS(傳輸安全層)。直到現在,TLS共出現三個版本: 1.1、1.2、1.3。目前使用最廣泛的是1.2.
  • TLS用於通信應用程序之間提供保密性、數據完整性。 TLS由記錄協議、握手協議、警告協議、變更密碼規範協議、擴展協議 等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。

對稱加密

在瞭解對稱加密前,先了解密碼學 的東西:

  • 明文 : 一般認爲明文是有意義的字符或者比特集,或者是通過某種公開編碼就能獲得的消息。
  • 密文:對明文進行某種加密後就變成了了密文
  • 加密:把原始的信息(明文)轉換爲密文的過程
  • 解密:把已經加密的信息恢復爲明文的過程。

對稱加密:指加密和解密使用同一個密鑰的方式。只要保證了密鑰的安全性,那麼整個通信過程也就具有安全性了。
在這裏插入圖片描述
對稱加密的算法:

比如DES3DESChaCha20等。目前常用的AES-128AES-192AES-256ChaCha20

在這裏插入圖片描述
總結一下對稱加密:

加密方使用密鑰將原始數據加密,然後將密鑰交給解密方解密。這樣如果密鑰被盜取,任何人都可以解密。

非對稱加密

非對稱加密有有個密鑰:一個公鑰一個私鑰,一般公鑰用來加密,私鑰解密。公鑰任何人都可以使用,而私鑰只有自己使用,是不會傳給任何人的。使用公鑰加密的密文,只能使用私鑰來解密。

在這裏插入圖片描述
非對稱加密解決了對稱加密的問題:就算公鑰被黑客拿到,但是它沒有私鑰,也就無法解開密文。

非對稱加密的算法:

比如:DH、DSA、RSA、ECC

在這裏插入圖片描述

混合加密

TLS使用的對稱加密非對稱加密 的混合加密方式來實現通信的安全性。

AES的加密(對稱加密)比較快,而RSA/ECDHE的加密(非對稱加密)的速度比較慢。所以TSL就結合了這兩種加密方式。

過程大概是這樣的(RSA加密):

  • 客戶端向服務器發送一個client_random隨機數和加密方法
  • 服務器收到之後,返回一個server_random、加密方法、自己的公鑰
  • 客戶端接收,接着生成另一個隨機數pre_random,使用公鑰加密後傳給服務器
  • 服務器用公鑰解密這個被加密後的pre_random

現在瀏覽器和服務器有三樣相同的憑證:client_random、server_random和pre_random。然後兩者用相同的加密方法混合這三個隨機數,生成最終的對稱密鑰。

ps: 下面會詳細講解,這裏只需知道還是會受到中間人攻擊。

儘管這樣還是會受到中間人攻擊。

中間人攻擊

如果黑客採用DNS劫持,將目標地址轉換爲黑客服務器的地址,然後黑客自己造一份公鑰和私鑰。所有的請求都發給中間人,中間人再以客戶端的請求內容向正規的服務器發請求,這樣所有的請求與響應,都會經過中間人。正式因爲客戶端不會驗證公鑰是不是來自自己請求的網站。

在這裏插入圖片描述
這就是中間人攻擊,所以上面的混合加密方式還不可靠,我們還要驗證server發來的公鑰是不是來自自己請求的server。(認證)

摘要算法

在解決上面認證問題 前,先解決數據完整性問題,如何保證數據的完整性?

在TLS中,實現完整性的手段主要是摘要算法。比如MD5SHA-1等,TLS推薦使用SHA-2(SHA-224/256/384/512)

所謂摘要算法,可以理解爲:把任意長度的數據壓縮爲一種固定長度的字符串,就要好像給數據加了把鎖。 生成的字符串稱爲摘要。並且這種加密算法不可逆,即沒有任何一種密鑰可以解開。
在這裏插入圖片描述
這樣就解決了數據完整性問題。下面再來看看解決身份認證問題

身份認證

如何證明server的身份,就要給server頒發一個身份證,誰來頒發? CA機構來頒發
全球的CA機構就幾家,CA機構可以爲server頒發一個數字證書

CA機構也有自己的私鑰和公鑰,不一樣的是CA機構使用私鑰加密,公鑰解密。

  • server將的原文,公鑰傳給CA
  • CA使用摘要算法(SHA-2)將原文生成摘要。使用自己私鑰加密這個摘要 —— 生成數字簽名。並將數字簽名、證書持有者、公鑰等信息組成數字證書發給server。
  • server 將原文和數字證書發給client。
  • client拿到證書後,使用內置的對應的CA公鑰進行解密,獲取摘要,並使用相同的摘要算法(SHA-2)對傳來的原文進行加密,生成另外一份摘要,比對兩份摘要是否相同,相同則身份驗證通過。使用這個公鑰加密生成的對稱密鑰X給server,以後都用這個密鑰X來通信.

在這裏插入圖片描述

傳統的RSA版本握手過程

意思是非對稱加密使用的是RSA加密算法。其實上面已經說了一遍,只是不一樣是:

當服務器傳送server_random、加密方法的時候,順便會帶上數字證書(包含了公鑰), 接着瀏覽器接收之後就會開始驗證數字證書。如果驗證通過,那麼後面的過程照常進行,否則拒絕執行。

梳理一下整個過程:
在這裏插入圖片描述

TLS 1.2 握手過程

TLS 1.2的握手過程,這裏介紹的是非對稱加密算法是ECDHE。看不傳統的RSA版本有何不同。

  • 1、客戶端發加密請求

    傳遞:一個client_random隨機數、所支持TLS版本、所支持的加密套件列表。

    • 隨機數:用於後面生成對稱密鑰

    • 密碼套件列表:什麼是加密套件列表?舉個例子:

      比如: TLS_ECDHE_WITH_AES_128_GCM_SHA256

      意思是:在TLS握手過程中,使用ECDHE算法生成pre_rendom(後面會講),使用128位的AES算法進行對稱加密,在對稱加密中使用主流的GCM分組模式,最後使用的摘要算法是SHA256

  • 2、服務器響應

    傳遞:一個server_random隨機數、一個server_params參數、確認TLS版本、確認加密套件列表、自己的證書。 (server_params下面會講)

  • 3、客戶端驗證證書,生成對稱密鑰

    客戶端驗證證書,驗證通過後,傳遞client_params參數給服務器(這個client_params會倍服務端放入公鑰加密)。

    接着客戶端通過ECDHE算法計算出pre_random(基於client_params和server_params)

    再接着,客戶端將這三個隨機數client_random、server_random、pre_random,通過一個僞隨機函數計算最終的對稱密鑰

  • 4、服務端生成對稱密鑰

    服務端收到客戶端的client_params參數後,也使用ECDHE算法通過ECDHE算法計算出pre_random(基於client_params和server_params)

    再將三個隨機數client_random、server_random、pre_random通過一個僞隨機函數計算最終的對稱密鑰

在這裏插入圖片描述
RSA和ECDHE的區別:

  • ECDHE,是在主流的TLS1.2中,使用的非對稱加密的加解密的算法,沒有用到RSA。
  • ECDHE還有一個特點:就是客戶端發送完收尾消息後,可以提前搶跑,直接發HTTP報文,節省一個RTT,不必等收尾消息到達服務器,然後等服務器返回收尾消息。

TSL 1.3做了哪些改進?

在2018年就推出了 TLS1.3,對於TLS1.2做了一系列的改進,主要分爲這幾個部分:強化安全、提高性能

強化安全

TLS1.3廢除了非常多的加密算法,最後保留了5個加密套件

  • TLS_AES_128_GCM_SHA256
  • TLS_AES_256_GCM_SHA384
  • TLS_CHACHA20_POLY1305_SHA256
  • TLS_AES_128_GCM_SHA256
  • TLS_AES_128_GCM_8_SHA256

可以看到,對稱加密算法只有:AES和ChaCha20; 分組模式也只剩:GCM和POLY1305; 摘要算法只剩:SHA-256和SHA-384了。

注意: ECDHE非對稱密鑰的加密算法徹底取代了RSA加密算法。原因是:RSA被發現了漏洞,一旦服務器私鑰被獲取,之前所有的對稱密鑰都會獲取,所有被加密的報文都會被破譯。而ECDHE算法在每一次握手時,生成的是不同的pre_random,進而每一次握手的對稱密鑰也不同,即使私鑰被破解,也不影響歷史消息。這種一次破譯不影響歷史信息的性質也叫前向安全性RSA不具備前向安全性,而ECDHE具備,所有在TLS 1.3中RSA被徹底取代。

提升性能

握手改進:
在這裏插入圖片描述

  • 在第一次握手時,客戶端就會發送:client_params參數,服務端不必等對方驗證證書後,纔拿到client_params,
  • 其他大體與TLS1.2都差不多,少一個RTT時間,所以TLS1.3握手方式也叫 1-RTT握手

來張圖:
在這裏插入圖片描述

最後在腦海中回想一下主流的加密算法:

  • 對稱加密算法: AES 、ChaCha20
  • 非對稱加密算法: ECDHE 、RSA
  • 摘要算法: SHA

參考文章:

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