網絡協議補完計劃--HTTPS

目錄

  • 前言
  • HTTPS概述
  • 一些需要提前科普的
    • TLS/SSL協議
    • 對稱加密
    • 非對稱加密
  • 客觀的理解HTTPS工作的每個過程
    • 如何保證安全傳輸?
    • 對稱加密的算法(祕鑰)如何確定?
    • 如何安全的協商加密的算法(祕鑰)?
    • 使用公鑰加密協商一定是安全的?
    • 如何保證公鑰發佈者的身份?
  • HTTPS實際的工作過程
  • HTTPS到底做了什麼?
  • 參考資料

前言

HTTPS現在幾乎已經無人不知無人不曉。
各大手機平臺也相繼要求使用HTTPS進行請求。
問起什麼是HTTPS、所有人都會回答《安全》
那麼、HTTPS是如何做到安全的。這是本篇想要談的東西。


HTTPS概述

隨着HTTP的應用越來越廣泛、一些問題便隨之而來。
其中首當其衝的就是安全性、例如:
1. 竊聽風險
由於HTTP本身並不具備加密屬性、所有的信息都等於在互聯網上裸奔。

2. 身份僞裝
用戶不知道自己的需求是否發送給了目標服務器、有可能被釣魚。

HTTPS、正致力於解決這些安全性問題。


一些需要提前科普的

  • TLS/SSL協議

TLS/SSL協議提供了身份驗證、信息加密和完整性校驗的功能。
說白點,就是在明文的上層和TCP層之間加上一層加密,這樣就保證上層信息傳輸的安全

  • 對稱加密

HTTPS在正常傳輸時、使用的對稱加密算法、保證傳輸效率。

對稱加密

如圖、對稱加密中A/B雙方都持有相同的祕鑰。發送數據時加密、接收數據時解密。

  • 非對稱加密

HTTPS在握手時使用非對稱加密、保證協商私鑰時的私密性。

非對稱加密

如圖、B持有(無數個)鎖、每次發送數據時都把數據鎖好。A接到盒子後、用手裏的鑰匙解密。
這樣做的好處是、即使客戶端B的鎖泄漏了、攻擊者也無法獲知真正的信息、因爲他並沒法解密。

如果想更多的瞭解對稱/非對稱加密、強推李永樂老師的科普視頻《B站鏈接》


客觀的理解HTTPS工作的每個過程

這裏、我先不從網上覆制HTTPS的工作過程、因爲感覺並不好理解。
而是通過一些問題以及解決方案來嘗試更好的理解HTTPS爲什麼這麼設計。

  • 如何保證安全傳輸?

既然HTTPS的關鍵是安全傳輸、那麼什麼是安全。
讓第三者無法攔截?這在物理上暫時不可實現。(當然不排除未來的可能性、但那時也就不需要HTTPS了
所以我們退而求其次:

讓第三者即使截獲、也無法解密(獲得)裏面的真正內容。

我們只要利用之前提到的《對稱加密》的方式、就可以達到這個效果。

  • 對稱加密的算法(祕鑰)如何確定?

如果客戶端都用同一個私鑰、自然不可能。
試想、你會將你的密碼公佈給100個人麼?只要其中一個人泄漏了你的祕鑰、將會滿盤皆輸。

我們希望服務器與每一個人的加密算法、都是不固定的。

但服務器再和每個用戶協商算法的時候、依舊沒有加密、仍舊存在被截獲的危險。

  • 如何安全的協商加密的算法(祕鑰)?

這裏需要引出剛纔提到的另一個加密算法:《非對稱加密》

忘了的同學可以翻上去重新看一下、套用到HTTPS裏是這樣:

  1. 服務器自己持有私鑰
  2. 服務器將公鑰分發給所有想要與自己鏈接的用戶
  3. 用戶將加密的核心算法用公鑰加密之後傳給服務器
  4. 服務器用私鑰對加密的核心算法進行解密並確認使用該算法。

經過這個步驟、我們達成了以下效果

每個客戶通過安全渠道確定加密的不同核心算法

  • 使用公鑰加密協商一定是安全的?

上面我們解決了安全渠道協商算法的問題、但是如果公鑰被篡改了、無異於從一開始就功虧一簣。

公鑰被中間者篡改

如上圖所示、紅色的祕鑰已經被攻擊者獲得、攻擊者可以隨意解密甚至串改二者的通訊信息。

  • 如何保證公鑰發佈者的身份?

其實如果只是一對一、我們完全可以在APP或者瀏覽器預裝服務器的公鑰、讓公鑰不通過網絡傳輸。

但在現實中不可行、因爲域名/服務器太多了、我們預裝不過來。
於是可以轉變一下思路、求助一下有公信力的第三者。
我們需要有一個人告訴我們、服務器發過來的這個私鑰、沒有被篡改。

使用數字簽名的方式進行身份認證

數字證書與簽名

上圖中、藍色部分(公鑰、數字證書)都是由第三方機構提供的。公鑰提供給客戶端、數字證書提供給服務器。而紅色部分(數字簽名)也是在服務器申請證書的時候由第三方機構書寫。用戶只需要信任第三方機構並集成即可。

當然這裏還有個問題、就是萬一我連證書籤發機構的公鑰都被篡改了呢?
能做到這一步時、只能說你的客戶端/瀏覽器已經被攻破了、已經不屬於HTTPS保護的範疇了~


HTTPS實際的工作過程

其實理解了之前說的HTTPS設計思路、已經不太需要背這張圖了。
具體每個步驟的數據包、可以參閱《Https原理淺析》

大概有下面幾部:

  1. 客戶端發送自己支持的加密規則給服務器,代表告訴服務器要進行連接了
  2. 服務器從中選出一套加密算法和hash算法以及自己的身份信息(地址等)以證書的形式發送給瀏覽器,證書中包含服務器信息,加密公鑰,證書的辦法機構
  3. 客戶端收到網站的證書之後要做下面的事情:
    (1). 驗證證書的合法性
    (2). 如果驗證通過證書,瀏覽器會生成一串隨機數,並用證書中的公鑰進行加密
    (3). 用約定好的hash算法計算握手消息,然後用生成的密鑰進行加密,然後一起發送給服務器
  4. 服務器接收到客戶端傳送來的信息,要求下面的事情:
    (1). 用私鑰解析出密碼,,用密碼解析握手消息,驗證hash值是否和瀏覽器發來的一致
    (2). 使用密鑰加密消息,回送
  5. 如果計算法hash值一致,握手成功

HTTPS到底做了什麼?

他負責《幫助服務器和客戶端在安全的環境下協商出一個祕鑰》《進行加密傳輸》


參考資料

Https原理淺析
搞懂HTTPS的過程和原理

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