一文看懂HTTPS的實現原理

2021-10-11 11:18:45 字數 3067 閱讀 4560

在此之前,我們先來總結一下在http協議中會存在的一些問題。

由於http協議本身是不具備加密功能的,所以也無法做到對通訊整體(使用http協議通訊的請求和響應的內容)進行加密。也就是說http報文使用明文(指未經過加密的報文)的方式傳送。

http明文協議的缺陷是導致資料洩密、資料篡改、流量劫持、釣魚攻擊等安全問題的重要原因。http協議無法對資料進行加密,所有的通訊雙方的資料都在網路中明文「裸奔」。通過網路的嗅探裝置以及一些技術手段,是可以還原http報文內容的。

所謂的完整性是指資訊的準確度。如果無法證明資訊的完整性,通常也就意味著我們無法判斷資訊是否真的準確。由於http協議無法證明通訊報文的完整性,因為,在請求或者響應傳送出去之後到對方接收之前的這段時間內,即使請求或者響應內容遭到篡改,也沒有辦法知道。換句話說,沒有任何辦法確認,發出的請求/響應和接收到的請求/響應的內容是前後相同的。

http協議中的請求和響應不會對通訊雙方進行確認。在使用http協議通訊時,由於不存在確認通訊方的處理,任何人都可以發起請求。另外,只要伺服器收到請求,不管是誰發過來的請求,都會返回乙個響應(但也限於傳送端的ip和埠沒有被伺服器設定限制訪問)。

http協議無法驗證通訊方的身份,任何人都可以偽造虛假的伺服器來欺騙使用者,實現「釣魚欺詐」,而使用者卻無法察覺。反觀https協議,它相比http協議多了一下優勢:

https並非是乙個新的應用層協議,只是在http協議通訊介面部分用ssl/tls協議代替而已。通常,http直接和tcp通訊。當使用了ssl/tls之後,http先和ssl/tls通訊,再由ssl/tls和tcp通訊 了。換句話說,所謂的https,其實就是身披ssl/tls協議的http。

有了ssl/tls協議之後,http就擁有了加密、證書以及完整性保護這些功能了。也就是說https ≈ http + ssl/tls。https協議的主要功能都依賴於ssl/tls協議,ssl/tls協議的功能實現主要依賴於三類基本演算法:雜湊函式、對稱機密和非對稱加密。下面來看一下瀏覽器和伺服器之間通過https進行通訊的整體過程:

瀏覽器發起https請求。

伺服器返回https證書。

客戶端驗證證書是否合法,如果不合法則會有提示告警。

當證書驗證合法後,在本地生成隨機數。

通過公鑰加密隨機數,並把機密後的隨機數傳輸到伺服器。

服務端通過私鑰對加密的隨機數進行解密。

服務端通過客戶端傳入的隨機數構造對稱加密演算法,對返回的結果進行對稱加密之後再返回到客戶端。

為什麼資料傳輸採用的是對稱加密?

首先:非對稱加密的加解密效率是非常低的,而http應用場景中通常端到端之間存在著大量的互動,非對稱加密因為效率非常低而無法被接受。

另外:在https場景中,只有服務端儲存了私鑰,一對公私鑰只能實現單向的加解密,所以https中內容傳輸採用的是對稱加密,而不是非對稱加密。非對稱加密只用在證書驗證階段。

http協議不安全是因為傳輸過程中容易被監聽者勾線監聽,偽造伺服器,而https協議主要解決的便是網路傳輸的安全問題。首先我們假設不存在認證機構,任何人都可以製作證書,這帶來的安全風險便是經典的「中間人攻擊」問題。

「中間人攻擊」的具體過程如下:

客戶端本地請求被劫持(如dns劫持等),所有的請求都傳送到了中間人伺服器上。

中間人伺服器返回自己製作的證書。

客戶端建立隨機數,通過中間人證書的公鑰對隨機數加密後傳送給中間人,然後後面就憑隨機數構造對稱加密對傳輸的內容進行加密後傳輸。

中間人通過自己的私鑰解密客戶端傳送的加密隨機數,然後就可以通過對稱加密演算法進行內容的解密。

中間人以新的客戶端向正規**發起請求。

因為中間人和伺服器之間的通訊過程是合法的,正規**通過建立的安全通道返回加密後的資料。

中間人憑藉和正規**建立的對稱加密演算法內內容進行解密。

中間人通過與客戶端建立的對稱加密演算法對正規**返回的已經解密的資料在進行加密傳輸。

客戶端通過與中間人建立的對稱加密演算法對中間人返回的加密資料進行解密。

由於缺少對證書的驗證,所以客戶端雖然發起的是https請求,但是客戶端完全不知道自己的網路已經被攔截,傳輸的內容被中間人全部竊取。

網路傳輸過程中需要經過很多的中間節點,雖然資料這個時候是無法被解密的,但是有可能被篡改,那麼如何校驗資料的完整性呢?這裡採用的是校驗數字簽名

數字簽名有兩種作用:

數字簽名生成:

數字簽名驗證:

接收方能夠通過傳送方的公鑰解密成功數字簽名,說明一定是真正的傳送發傳送過來的,不可能是假冒的。得到的兩個訊息摘要是一致的,說明訊息沒有被篡改過。這兩點也正是上面說到的數字簽名的作用。

瀏覽器在收到伺服器返回的證書之後,會對證書做以下驗證:

以上四步全部滿足的情況下,瀏覽器才認為證書的合法的。

最後再來說一下ssl和tls有什麼區別?

tls(transport layersecurity,傳輸層安全協議):用於兩個應用程式之間提供保密性和資料完整性。該協議由兩層組成:tls記錄協議tls握手協議

ssl是netscape開發的專門使用者保護web通訊的,目前版本為3.0。最新版本的tls 1.0是ietf制定的一種新的協議,它建立在ssl 3.0協議規範之上,是ssl 3.0的後續版本。兩者差別極小,可以理解為ssl 3.1,它是寫入了rfc的。

ssl協議和tls協議的主要區別如下:

tls的主要目標是使ssl更安全,並使協議的規範更精確和完善。tls 在ssl v3.0 的基礎上,提供了以下增強內容:

更安全的mac演算法。

更嚴密的警報。

「灰色區域」規範的更明確的定義。

一文解讀HTTPS 原理

隨著 https 建站的成本下降,現在大部分的 都已經開始用上 https 協議。大家都知道 https 比 http 安全,也聽說過與 https 協議相關的概念有 ssl 非對稱加密 ca證書等,但對於以下靈魂三拷問可能就答不上了 1.為什麼用了 https 就是安全的?2.https 的底層原...

一文看懂CDN加速原理

隨著網際網路的發展,使用者在使用網路時對 的瀏覽速度和效果愈加重視,但由於網民數量激增,網路訪問路徑過長,從 而使使用者的訪問質量受到嚴重影響。特別是當使用者與 之間的鏈路被突發的大流量資料擁塞時,對於異地網際網路使用者急速增加的地區來說,訪問質量不良更是乙個 急待解決的問題。很多時候,大家都在談c...

一文看懂POE供電原理

現在越來越多的人,開始接觸和了解使用poe監控供電系統,於是乎,在網上找了一些關於poe供電的基本原理資料,與大家共同分享。標準的五類網線有四對雙絞線但是在10m base t和100m base t中只用到其中的兩對。ieee80 2.3af允許兩種用法 1 應用空閒腳供電時4 5腳連線為正極,7...