HTTPS讓資料傳輸更安全

2021-08-22 00:02:22 字數 4735 閱讀 1544

談到https, 就不得不談到與之相對的httphttp的特性是明文傳輸,因此在傳輸的每乙個環節,資料都有可能被第三方竊取或者篡改,具體來說,http 資料經過 tcp 層,然後經過wifi路由器運營商目標伺服器,這些環節中都可能被中間人拿到資料並進行篡改,也就是我們常說的中間人攻擊

為了防範這樣一類攻擊,我們不得已要引入新的加密方案,即 https。

https並不是乙個新的協議, 而是乙個加強版的http。其原理是在httptcp之間建立了乙個中間層,當httptcp通訊時並不是像以前那樣直接通訊,直接經過了乙個中間層進行加密,將加密後的資料報傳給tcp, 相應的,tcp必須將資料報解密,才能傳給上面的http。這個中間層也叫安全層安全層的核心就是對資料加解密

接下來我們就來剖析一下https的加解密是如何實現的。

首先需要理解對稱加密非對稱加密的概念,然後討論兩者應用後的效果如何。

對稱加密是最簡單的方式,指的是加密解密用的是同樣的金鑰

而對於非對稱加密,如果有 a、 b 兩把金鑰,如果用 a 加密過的資料報只能用 b 解密,反之,如果用 b 加密過的資料報只能用 a 解密。

接著我們來談談瀏覽器伺服器進行協商加解密的過程。

首先,瀏覽器會給伺服器傳送乙個隨機數client_random和乙個加密的方法列表。

伺服器接收後給瀏覽器返回另乙個隨機數server_random和加密方法。

現在,兩者擁有三樣相同的憑證:client_randomserver_random和加密方法。

接著用這個加密方法將兩個隨機數混合起來生成金鑰,這個金鑰就是瀏覽器和服務端通訊的暗號

如果用對稱加密的方式,那麼第三方可以在中間獲取到client_randomserver_random和加密方法,由於這個加密方法同時可以解密,所以中間人可以成功對暗號進行解密,拿到資料,很容易就將這種加密方式破解了。

既然對稱加密這麼不堪一擊,我們就來試一試非對稱加密。在這種加密方式中,伺服器手裡有兩把鑰匙,一把是公鑰,也就是說每個人都能拿到,是公開的,另一把是私鑰,這把私鑰只有伺服器自己知道。

好,現在開始傳輸。

瀏覽器把client_random和加密方法列表傳過來,伺服器接收到,把server_random加密方法公鑰傳給瀏覽器。

現在兩者擁有相同的client_randomserver_random和加密方法。然後瀏覽器用公鑰將client_randomserver_random加密,生成與伺服器通訊的暗號

這時候由於是非對稱加密,公鑰加密過的資料只能用私鑰解密,因此中間人就算拿到瀏覽器傳來的資料,由於他沒有私鑰,照樣無法解密,保證了資料的安全性。

這難道一定就安全嗎?聰明的小夥伴早就發現了端倪。回到非對稱加密的定義,公鑰加密的資料可以用私鑰解密,那私鑰加密的資料也可以用公鑰解密呀!

伺服器的資料只能用私鑰進行加密(因為如果它用公鑰那麼瀏覽器也沒法解密啦),中間人一旦拿到公鑰,那麼就可以對服務端傳來的資料進行解密了,就這樣又被破解了。而且,只是採用非對稱加密,對於伺服器效能的消耗也是相當巨大的,因此我們暫且不採用這種方案。

可以發現,對稱加密和非對稱加密,單獨應用任何乙個,都會存在安全隱患。那我們能不能把兩者結合,進一步保證安全呢?

其實是可以的,演示一下整個流程:

瀏覽器向伺服器傳送client_random和加密方法列表。

伺服器接收到,返回server_random、加密方法以及公鑰。

瀏覽器接收,接著生成另乙個隨機數pre_random, 並且用公鑰加密,傳給伺服器。(敲黑板!重點操作!)

伺服器用私鑰解密這個被加密後的pre_random

現在瀏覽器和伺服器有三樣相同的憑證:client_randomserver_randompre_random。然後兩者用相同的加密方法混合這三個隨機數,生成最終的金鑰

然後瀏覽器和伺服器儘管用一樣的金鑰進行通訊,即使用對稱加密

這個最終的金鑰是很難被中間人拿到的,為什麼呢? 因為中間人沒有私鑰,從而拿不到pre_random,也就無法生成最終的金鑰了。

回頭比較一下和單純的使用非對稱加密, 這種方式做了什麼改進呢?本質上是防止了私鑰加密的資料外傳。單獨使用非對稱加密,最大的漏洞在於伺服器傳資料給瀏覽器只能用私鑰加密,這是危險產生的根源。利用對稱和非對稱加密結合的方式,就防止了這一點,從而保證了安全。

儘管通過兩者加密方式的結合,能夠很好地實現加密傳輸,但實際上還是存在一些問題。黑客如果採用 dns 劫持,將目標位址替換成黑客伺服器的位址,然後黑客自己造乙份公鑰和私鑰,照樣能進行資料傳輸。而對於瀏覽器使用者而言,他是不知道自己正在訪問乙個危險的伺服器的。

事實上https在上述結合對稱和非對稱加密的基礎上,又新增了數字證書認證的步驟。其目的就是讓伺服器證明自己的身份。

為了獲取這個證書,伺服器運營者需要向第三方認證機構獲取授權,這個第三方機構也叫ca(certificate authority), 認證通過後 ca 會給伺服器頒發數字證書

這個數字證書有兩個作用:

伺服器向瀏覽器證明自己的身份。

把公鑰傳給瀏覽器。

這個驗證的過程發生在什麼時候呢?

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

現在我們來梳理一下https最終的加解密過程:

瀏覽器拿到數字證書後,如何來對證書進行認證呢?

首先,會讀取證書中的明文內容。ca 進行數字證書的簽名時會儲存乙個 hash 函式,來這個函式來計算明文內容得到資訊a,然後用公鑰解密明文內容得到資訊b,兩份資訊做比對,一致則表示認證合法。

當然有時候對於瀏覽器而言,它不知道哪些 ca 是值得信任的,因此會繼續查詢 ca 的上級 ca,以同樣的資訊比對方式驗證上級 ca 的合法性。一般根級的 ca 會內建在作業系統當中,當然如果向上找沒有找到根級的 ca,那麼將被視為不合法。

中間人攻擊過程如下:

1. 伺服器向客戶端傳送公鑰。

2. 攻擊者截獲公鑰,保留在自己手上。

3. 然後攻擊者自己生成乙個【偽造的】公鑰,發給客戶端。

4. 客戶端收到偽造的公鑰後,生成加密hash值發給伺服器。

5. 攻擊者獲得加密hash值,用自己的私鑰解密獲得真秘鑰。

6. 同時生成假的加密hash值,發給伺服器。

7. 伺服器用私鑰解密獲得假秘鑰。

8. 伺服器用假秘鑰加密傳輸資訊

防範方法:

服務端在傳送瀏覽器的公鑰中加入ca證書,瀏覽器可以驗證ca證書的有效性。

ssl是一種標準協議,用於加密瀏覽器和伺服器之間的通訊。它允許通過internet安全輕鬆地傳輸賬號密碼、銀行卡、手機號等私密資訊。

ssl證書就是遵守ssl協議,由受信任的ca機構頒發的數字證書。

https=http+ssl。如果想要建立https連線,則首先必須從受信任的證書頒發機構(ca)gworg機構註冊 ssl證書。安裝ssl證書後,**位址列http後面就會多乙個「s」,還有綠色安全鎖標誌。

六、總結

https並不是乙個新的協議, 它在httptcp的傳輸中建立了乙個安全層,利用對稱加密非對稱加密結合數字證書認證的方式,讓傳輸過程的安全性大大提高。

HTTPS資料傳輸流程

1.客戶端向伺服器端發起https請求,連線到伺服器端的443埠上 2.伺服器端有乙個秘鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,伺服器端儲存著私鑰,將公鑰傳送給客戶端 3.客戶端收到伺服器端的公鑰之後,對公鑰進行檢查,驗證其合法性,如果發現公鑰有問題,那麼https傳輸無法繼續 如果合格,那...

網路 HTTPS 怎麼保證資料傳輸的安全性

大家都知道,在客戶端與伺服器資料傳輸的過程中,http協議的傳輸是不安全的,也就是一般情況下http是明文傳輸的。但https協議的資料傳輸是安全的,也就是說https資料的傳輸是經過加密的。在客戶端與伺服器這兩個完全沒有見過面的陌生人交流中,https是如何保證資料傳輸的安全性的呢?下面我們來一步...

資料傳輸安全性保證

資料傳輸過程中,安全性十分重要,尤其是對於一些敏感的使用者資訊,其安全性保證更應當被重視。現代軟體開發中,無論是基於敏捷式的軟體開發,或者基於前後端分離的軟體開發,都離不開提供對外介面,而請求這些介面資料的安全性應當得到保證。保證傳輸資料的安全性,主要有以下方法 資料加密 資料加密一直是保密資料的重...