最詳細的HTTPS介紹(轉載)

為什么需要https

HTTP是明文傳輸的,也就意味著,介于發送端、接收端中間的任意節點都可以知道你們傳輸的內容是什么。這些節點可能是路由器、代理等。
舉個最常見的例子,用戶登錄。用戶輸入賬號、密碼,如果采用HTTP的話,只要在代理服務器上做點手腳就可以拿到你的密碼了。

用戶登錄 -> 代理服務器(做手腳) -> 實際授權服務器

在發送端對密碼進行加密?沒用的,雖然別人不知道你原始密碼多少,但能夠拿到加密后的賬號密碼,照樣能登錄。

HTTPS是如何保障安全的

HTTPS其實就是secure http的意思啦,也就是http的安全升級版。稍微了解網絡基礎的同學都知道,http是應用層協議,位于HTTP協議之下是傳輸協議TCP。TCP負責傳輸,HTTP則定義了數據如何進行包裝。

HTTP -> TCP(明文傳輸)

HTTPS相對于HTTP有哪些不同呢?其實就是在HTTP跟TCP之間加上了加密層TLS/SSL。

神馬是TLS/SSL

通俗的講,TLS、SSL其實是類似的東西,SSL是個加密套件,負責對HTTP的數據進行加密。TLS是SSL的升級版,現在提到HTTPS,加密套件基本指的TLS。

傳輸加密流程

原先是應用層將數據直接給到TCP進行傳輸,現在改成應用層將數據給到TLS/SSL,將數據加密后再給到TCL進行傳輸。
大致如圖所示。

SSL/TLS 協議

就是這么回事。將數據加密后再傳輸,而不是直接讓數據在復雜而又充滿危險的網絡中裸奔,在很大程度上保證了數據的安全。這樣的話,即使數據被中間節點截獲,壞人也看不懂。

HTTPS是如何加密數據的

一般來說,分為對稱加密和非對稱加密(也叫公開密鑰加密)

  • 對稱加密
    對稱加密的意思就是,加密數據用的密鑰和解密用的密鑰是一樣的。
  • 非對稱加密
    非對稱加密的意思就是,加密數據用的密鑰(公鑰),跟解密數據用的密鑰(私鑰)是不一樣的。

什么是公鑰呢?其實就是字面上的意思1——公開的密鑰,誰都可以查到。因此非對稱密鑰也叫公開密鑰加密。
公鑰、私鑰兩個有什么聯系呢?
簡單的說就是,通過公鑰加密的數據,只能通過私鑰解開。通過私鑰加密的數據,只能通過公鑰解開。

很多同學都知道用私鑰能解開公鑰加密的數據,但忽略了一點,私鑰加密的數據,同樣可以用公鑰解密出來。而這點對于理解HTTPS的整套加密、授權體系非常關鍵。

舉個非對稱加密的例子
??登錄用戶:小明
??授權網站:某知名社交網站(以下簡稱XX)
??步驟一:小明輸入賬號密碼 ——> 瀏覽器用公鑰加密 ——> 請求發給XX
??步驟二:XX用私鑰解密,驗證通過 ——> 獲取小明社交數據,用私鑰加密 ——> 瀏覽器用公鑰解密并展示

用非對稱加密,就能解決數據傳輸安全的問題了嗎?前面特意強調了以下,私鑰加密的數據,公鑰是可以解開的。也就是說,非對稱加密只能保證單項數據傳輸的安全性。

此外,還有公鑰如何分發/獲取的問題。下面會對這兩個問題進行進一步的探討。

公開密鑰加密:兩個明顯的問題
問題一:公鑰如何獲取
瀏覽器是怎么獲得XX的公鑰的?當然,小明可以自己去網上查,XX也可以將公鑰貼在自己的主頁。然而,對于一個動不動就成敗上千萬的社交網站來說,會給用戶造成極大的不便利,畢竟大部分用戶都不知道“公鑰”是什么東西。

問題二:數據傳輸僅單向安全
前面提到,公鑰加密的數據,只有私鑰能解開,于是小明的賬號、密碼是安全了,半路不怕被攔截。

然后有個很大的問題:私鑰加密的數據,公鑰也能解開。加上公鑰是公開的,小明的隱私數據相當于在網上換了種方式裸奔。(中間代理服務器拿到了公鑰后,毫不猶豫的就可以解密小明的數據)

下面就針對這兩個問題進行解答。

  • 問題一:公鑰如何獲取
    這里要涉及兩個非常重要的概念:證書、CA(證書頒發機構)
    CA(證書頒發機構)
    強調兩點:
    ??1.可以頒發證書的CA有很多(國內外都有)。
    ??2.只有少數CA被認為是權威、公正的,這些CA頒發的證書,瀏覽器才認為是信得過的,比如VeriSign
    證書頒發的細節這里先不展開,可以先理解為,網站向CA提交了申請,CA審核通過后,將證書頒發給網站,用戶訪問網站的時候,網站將證書給到用戶(瀏覽器)。
    至于證書的細節,同樣在后邊講到。

  • 問題二:數據傳輸僅單向安全
    上面提到,通過私鑰加密的數據,可以用公鑰解密還原。那么,這是不是就意味著,網站傳給用戶的數據是不安全的?
    答案是:是!!!
    看到這里,可能你心里會這樣想:用了HTTPS,數據還是裸奔,這么不靠譜,還不如直接用HTTP來的省事。
    但是,為什么業界對網站HTTPS化的呼聲越來越高呢?這明顯跟我們的感性認知相違背啊。
    因為:HTTPS雖然用到了公開密鑰加密,但同時也結合了其他手段,如對稱加密,來確保授權、加密傳輸的效率、安全性。

概括來說,整個簡化的加密流程就是:

HTTPS加密通信時序圖

了解了HTTPS加密通信的流程后,對于數據裸奔的疑慮應該基本打消了。然而,細心的同學可能又有疑問了:怎么樣確保證書是合法有效的?

轉載者備注:經過其他資料了解,
對稱密鑰的獲取并不是通過客戶端直接發送給服務器的,
而是在握手期間客戶端和服務器端經過協商,
確定加密算法后,客戶端和服務器端分別生成的對稱密鑰。
對稱密鑰生成過程:(第一次握手隨機數+第二次握手隨機數+第三次握手隨機數)+確定的加密算法=對稱密鑰

證書非法可能有兩種情況:

  1. 證書是偽造的:壓根不是CA頒發的
  2. 證書被篡改過:比如將XX網站的公鑰給替換了

舉個例子:
我們知道,這個世界上存在一種東西叫做代理。于是,上面小明登錄XX網站可能是這樣的,小明的登錄請求先到了代理服務器,代理服務器再將請求轉發到授權服務器。

小明 ——> 邪惡的代理服務器 ——> 登錄授權服務器
小明 <—— 邪惡的代理服務器 <—— 授權服務器

如果善良的小明相信了這個證書,那他就再次裸奔了。當然不能這樣,那么,是通過什么機制來防止這種事情的發生呢?

下面,我們來看看“證書”有哪些內容,然后就可以大致猜到是如何進行預防的了。

證書簡介
在正式介紹證書的格式前,先插播一個小廣告,科普下數字簽名和摘要,然后再對證書進行非深入的介紹。

為什么呢?因為數字簽名、摘要是證書防偽非常關鍵的武器。

數字簽名與摘要
簡單來說,“摘要”就是對傳輸的內容,通過hash算法計算出一段固定長度的串(也就是“摘要”就是通過hash算法計算出的一個hash值)。然后,再通過CA的私鑰對這段摘要進行加密,加密后得到的結果就是“數字簽名”。(這里提到的CA的私鑰,后面再進行介紹)

明文 ——> hash運算得到摘要 ——> 私鑰加密得到數字簽名

結合上面的內容,我們知道,這段數字簽名只有CA的公鑰才能解密。

有一點需要補充下,就是:CA本身有自己的證書,俗稱為“根證書”,這個“根證書”是用來證明CA的身份的,本質上是一份普通的數字證書。瀏覽器通常會內置大多數主流權威CA的根證書。

接下來,我們再來看看神秘的“證書”究竟包含了什么內容,然后就大致猜到是如何對非法證書進行預防的了。

證書格式

  1. 證書版本號(Version)
    證書版本號知名X.509證書的格式版本,現在的值可以為:
    ??1)0:v1
    ??2)1:v2
    ??3)2:v3
    也為將來的版本進行了預定義

  2. 證書序列號(Serial Number)
    序列號指定由CA分配給證書的唯一的“數字型標識符”。當證書被取消是,實際上是將此證書的序列號放入由CA簽發的CRL中。這也是序列號唯一的原因。

  3. 簽發機構名(Issuer)
    此域用來標識簽發證書的CA的X.500 DN(DN-Distinguished Name)名字。包括:
    ??1)國家(C)
    ??2)省市(ST)
    ??3)地區(L)
    ??4)組織機構(O)
    ??5)單位部門(OU)
    ??6)通用名(CN)
    ??7)郵箱地址

  4. 有效期(Validity)
    指定證書的有效期,包括:
    ??1)證書開始生效的日期時間
    ??2)證書失效的日期時間
    每次使用證書時,需要檢查證書是否在有效期內。

  5. 證書用戶名(Subject)
    指定證書持有者的X.500唯一名字。包括:
    ??1)國家(C)
    ??2)省市(ST)
    ??3)地區(L)
    ??4)組織機構(O)
    ??5)單位部門(OU)
    ??6)通用名(CN)
    ??7)郵箱地址

  6. 證書持有者公開密鑰信息(Subject Public Key Info)
    證書持有者公開密鑰信息域包括兩個重要信息:
    ??1)證書持有者的公開密鑰的值。
    ??2)公開密鑰使用的算法標識符。此標識符包含公開密鑰算法和hash算法。

  7. 擴展項(Extension)
    X.509 V3證書是在v2的基礎上一標準式或普通形式增加了擴展項,以使證書能夠附帶額外信息。標準擴展是指由X.509 V3版本定義的對V2版本增加的具有廣泛應用前景的擴展項,任何人都可以向一些權威機構,如ISO,來注冊一些其他擴展,如果這些擴展項應用廣泛,也許以后會成為標準擴展項。

  8. 簽發者唯一標識符(Issuer Unique Identifier)
    簽發者唯一標識符在第2班加入證書定義中。此域用在當同一個X.500名字用于多個認證機構時,用一比特字符串來唯一標識簽發者的X.500名字(這些名字都是由誰簽發的)。可選。

  9. 證書持有者唯一標識符(Subject Unique Identifier)
    持有證書者唯一標識符在第2班的標準中加入X.509證書定義。此域用在當同一個X.500名字用于多個證書持有者時,用一比特字符串來唯一標識證書持有者的X.500 名字。可選。

  10. 簽名算法標識符(Signature Algorithm)
    簽名算法標識用來指定由CA簽發證書是所使用的“簽名算法”。算法標識符用來指定CA簽發證書是所使用的:
    ??1)公開密鑰算法;
    ??2)hash算法
    例如:sha256WithRSAEncryption
    須向國際知名標準組織(例如ISO)注冊

  11. 簽名值(Issuer's Signature)
    證書簽發機構對證書上述內容的簽名值。

如何辨別非法證書
上面提到,XX證書包含了如下內容:
??證書包含了對應的頒發機構CA
??證書內容本身的數字簽名(用CA私鑰加密)
??證書持有者的公鑰
??證書簽名用到的hash算法

瀏覽器內置的CA的根證書包含了CA的公鑰(非常重要!!!)

好了,接下來講解如何識別偽造證書以及篡改證書的場景:

完全偽造的證書
這種情況比較簡單,對證書進行檢查:
??1)證書頒發的機構時偽造的:瀏覽器不認識,直接認為是危險證書
??2)證書頒發的機構確實存在,于是根據CA名,找到對應內置的CA根證書、CA的公鑰
??3)用CA公鑰,對偽造的證書的摘要進行解密,發現解不了,認為是危險證書

篡改過的證書
假設代理通過某種途徑,拿到XX的證書,然后將證書的公鑰偷偷修改成自己的,然后喜滋滋的認為用戶要上鉤了。然而是在太單純了:
??1)檢查證書,根據CA名,找到對應的CA根證書,以及CA的公鑰。
??2)用CA的公鑰,對證書的數字簽名進行解密,得到對應的證書摘要A
??3)根據證書簽名使用的hash算法,計算出當前證書的摘要B
??4)對比A和B,發現不一致,判定是危險證書

上面啰啰嗦嗦講了一大通,HTTPS如何確保數據加密傳輸的安全的機制基本都覆蓋到了,太過技術細節的就直接跳過了。最后還有兩個問題:
??1)網站是怎么把證書給到用戶(瀏覽器)的?
??2)上面的對稱密鑰是怎么協商出來的?

這兩個問題,其實就是HTTPS握手階段要干的事情。HTTPS的數據傳輸流程整體上跟HTTP是類似的,同樣包含兩個階段:握手、數據傳輸。
??握手:證書下發,密鑰協商(這個階段都是明文的)
??數據傳輸:這個階段才是加密的,用的就是握手階段協商出來的對稱密鑰

原文轉載出處:最詳細的HTTPS介紹

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容