HTTPS讓數據傳輸更安全

談到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加密,生成與服務器通信的暗號

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

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

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

二、對稱加密和非對稱加密的結合

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

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

  1. 瀏覽器向服務器發送client_random和加密方法列表。
  2. 服務器接收到,返回server_random、加密方法以及公鑰。
  3. 瀏覽器接收,接着生成另一個隨機數pre_random, 並且用公鑰加密,傳給服務器。(敲黑板!重點操作!)
  4. 服務器用私鑰解密這個被加密後的pre_random

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

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

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

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

三、添加數字證書

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

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

傳輸過程

爲了獲取這個證書,服務器運營者需要向第三方認證機構獲取授權,這個第三方機構也叫CA(Certificate Authority), 認證通過後 CA 會給服務器頒發數字證書

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

  1. 服務器向瀏覽器證明自己的身份。
  2. 把公鑰傳給瀏覽器。

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

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

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

認證過程

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

首先,會讀取證書中的明文內容。CA 進行數字證書的簽名時會保存一個 Hash 函數,來這個函數來計算明文內容得到信息A,然後用公鑰解密明文內容得到信息B,兩份信息做比對,一致則表示認證合法。

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

四、什麼是 HTTPS 中間人攻擊?

中間人攻擊過程如下:

1. 服務器向客戶端發送公鑰。

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

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

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

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

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

7. 服務器用私鑰解密獲得假祕鑰。

8. 服務器用假祕鑰加密傳輸信息

防範方法:

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

五、SSL(安全套接字層)

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

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

HTTPS=HTTP+SSL。如果想要建立HTTPS連接,則首先必須從受信任的證書頒發機構(CA)Gworg機構註冊 SSL證書。安裝SSL證書後,網站地址欄HTTP後面就會多一個“S”,還有綠色安全鎖標誌。

六、總結

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

 

 

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