在寫這篇文章的時候,複製位址列的內容,可以得到https://www.codeuphub.com/front/template/598/view/article
。 可以看到codeuphub是使用的HTTPS協議。 當滑鼠hover過去的時候,可以看到有提示連線是安全的
,所以HTTPS的主要作用是保證連結的安全。
那麼問題來了,HTTP為什麼是不安全的?
HTTP明文傳輸的風險
HTTP一開始誕生在學術界,目的很單純,就是爲了傳輸超文字內容,那個時候也沒有很強的資訊加密需求,所以HTTP一直保持著明文傳輸資料的特徵。
但是隨著網際網路的發展,資料越來越多,傳輸的內容也越來越多,網際網路在人們生活中的影響不斷擴大,在資訊過程中搞小動作謀取利潤的場景也誕生了。HTTP的明文傳輸就會面臨著,在傳輸過程中的任一環節,資料都有可能被竊取或者篡改,好比傳輸過程有個中間人,把通訊過程的一切內容都掌握其中。
如上圖所示,在通訊過程中,資訊被第三方攔截篡改的情況,業界稱為中間人攻擊。
具體來說,在HTTP將資料提交給TCP層後,資料會經過使用者電腦、WIFI路由器、運營商和目標伺服器,在這其中的任一環節,資料都有可能被竊取或篡改。比如使用者電腦被駭客安裝了惡意軟體,那麼這些惡意軟體就能抓取和篡改所發出的HTTP請求的內容。如果是連上了釣魚WIFI,那麼資料也可能被抓取和篡改。所有資訊流經的鏈路,都可能把資訊進行攔截和篡改。
HTTP的安全應對策略——協議棧加入安全層
HTTP的明文傳輸會讓傳輸過程毫無安全性可言,且制約了網上購物、線上轉賬等一系列場景應用,倒逼我們去思考安全的資訊傳輸方案。
在資訊傳輸的網路進行修改,讓通道安全是不現實的方案,故而需要從資料包本身下手,尋求突破口,對資料包進行加密是目前採用的方案。
從HTTP協議層面來看,可以在HTTP層和TCP層之間插入一個安全層,所有經過安全層的資料都被被加密或者解密。
從上圖可以看出,HTTPS並不是一個全新的協議,而是在HTTP的基礎上加入了一個安全層,沒有改動到HTTP協議也沒有改動到TCP/IP。安全層的主要職責有兩個,一是對發起HTTP請求的資料進行加密操作,二是對接收到HTTP的內容進行解密操作。
當下HTTPS的請求流程
請求流程分析
整個流程具體如下:
瀏覽器將自己支援的對稱加密列表、非對稱加密列表、
client-random
傳送給伺服器伺服器選擇一個對稱加密套件(也就是加密的方法)、非對稱加密套件、
service-random
、伺服器的數字證書
,傳送給瀏覽器瀏覽器驗證數字證書——digital certificate 的合法性。( 首先讀取數字證書中的明文資訊,採用Certificate Authority相同的Hash函式計算來得到資訊摘要A,然後利用CA的公鑰解密簽名資料,得到資訊摘要B,對比A、B一致即可確認證書是合法的,同時瀏覽器還會驗證證書相關的域名資訊、有效時間等資訊 )
瀏覽器生成一個隨機數
pre-master
,利用伺服器的公鑰(數字證書裡面包含了伺服器公鑰)加密,傳送給伺服器。伺服器用自己的私鑰解密後得到
pre-master
, 用client-random
+service-random
+pre-master
組合生成對稱加密金鑰master secret
瀏覽器也用
client-random
+service-random
+pre-master
組合生成對稱加密金鑰master secret
後續的通訊流程都用對稱加密金鑰
master secret
進行加密解密,確保資訊的安全。
以上就是整個HTTPS的完整請求流程
上面的流程提到了數字證書,它起到一個怎樣的作用,以及如何申請的呢?
數字證書的作用和申請流程
數字證書的作用
數字證書主要有兩個作用,一是證明伺服器的合法性,也就是伺服器A確實是A,另一個就是儲存伺服器的公鑰資訊。
為何需要驗證伺服器的合法性呢? 我們的輸入到位址列的一般是伺服器的域名,需要進行DNS解析才能得到伺服器的IP地址,如果駭客透過DNS劫持,把IP地址指向了駭客伺服器,瀏覽器的通訊物件就變成了駭客伺服器而無從得知。
數字證書的申請流程
網路世界引入了一個權威機構,稱為CA(Certificate Authority) 負責給伺服器頒發證書,頒發的證書就稱為數字證書(Digital Certificate),這兩者好比派出所和和身份證的關係。
通常的申請流程分為以下幾步:
伺服器需要準備一套私鑰和公鑰,私鑰自己留著
伺服器向CA機構提交
公鑰
、公司、站點等資訊並等待認證,這個認證過程可能是收費的CA機構透過線上、線下等多種渠道來驗證伺服器所提供的資訊的真實性,如公司是否存在、企業是否合法、域名是否歸屬該企業等
如果資訊稽覈透過,CA會向伺服器簽發認證的數字證書,包含了伺服器的
公鑰
、組織資訊、CA的資訊、有效時間、證書序號等,這些資訊的都是明文的,同時還包含CA生成的簽名。
CA生成的簽名過程如下:
首先CA使用hash函式計算伺服器提交的明文資訊,等到資訊摘要
CA使用它的私鑰對資訊摘要進行加密,加密後的密文就是CA頒發給伺服器的數字簽名 (相當於人民幣上的防偽水印)。
總結
HTTPS透過增加
TLS安全層
對資訊傳輸過程的資料包進行加密解密
。安全通訊過程的建立是需要非對稱加密和對稱加密組合在一起使用。
DNS解析過程可能會被駭客攔截,所以增加了CA機構給伺服器頒發數字證書以驗證伺服器身份。
數字證書上會包含
伺服器的公鑰
、公司、域名等資訊,透過hash函式
計算這些資訊得到資訊摘要A
,再使用CA的公鑰對
數字簽名進行解密等到資訊摘要B
,如果A、B一致,證明伺服器身份是合法的。傳輸過程的對稱加密金鑰使用
client-random
+service-random
+pre-master
(需要非對稱加密傳輸雙方確認)組合生成的master secret