上下集知識點總結:
前情提要:
蝙蝠紀元,疫情之下。二丫欲訪問京東購物,不料彈出安全提示,遂找二毛一探究竟。二毛一頓排查後,開始用通俗易懂的語言深入淺出的向二丫解釋 HTTP作用及優缺點、HTTPS的功能作用......
未看過上集的,可進入傳送門:
【故事】跟零計算機基礎的房東女兒講了一下午的中間人劫持京東事件後,她感激涕零,決定給我免除房租(上)
二丫掛掉電話,對二毛邪魅一笑...
開始之前,我們先了解一些前置技術。
前置技術
1 對稱加密
定義:一種加密演算法,只有一個金鑰,這個金鑰既可以用來加密資料,又可以用來解密資料。
優點:加解密速度快。
缺點:由於只有一個金鑰,應用場景不廣泛。
2 非對稱加密
定義:也是一種加密演算法,有兩個金鑰,一個稱為公鑰,另一個稱為私鑰。其中公鑰可以廣而告之,私鑰需要自己妥善儲存。公鑰可以加密資料,然後用私鑰解密;反過來,私鑰也可以加密資料,用公鑰來解密。
優點:由於公鑰和私鑰可以互相加解密,應用場景廣泛。
缺點:加解密速度較慢。
3 訊息摘要:
定義:通過雜湊函式,將任意長度的訊息變成固定長度的短訊息,且一個固定的內容無論經過多少次雜湊得到的結果仍然是固定不變的,稱為訊息摘要。
應用場景:可將長訊息縮短,加密處理起來更快。
4 數字證書:
定義:由CA(一個權威的認證機構)頒發的一種證書,裡面含有可以標識你身份的資訊,類似於我們的身份證。
注:證書是必須由服務端主動向CA申請的。服務端(假設為網站)提供自己的域名等資訊,接著CA會使用它們的私鑰對內容進行加密,然後作為數字證書返回給服務端。
應用場景:
身份證明。由於CA是權威的,他們的私鑰會嚴格儲存,公鑰會廣為公開,所以一旦服務端網站出示了數字證書後,我們就可以依據頒發證書的CA,找到對應的公鑰,然後解密數字證書得到裡面的域名資訊,並比對當前訪問的域名是否跟得到的域名一致,以此判斷真假。
5 數字簽名:
定義:只有資訊的傳送者才能生成的、別人無法偽造的一段字串。
主要有兩個步驟生成:
首先對要傳送的內容進行訊息摘要得到短字串。
傳送者再使用自己的私鑰對該短字串進行加密,就得到了數字簽名。(當然也可以對整個資訊做數字簽名,但是經過訊息摘要處理的資訊會更少,加密更快。)
應用場景:
完整性保護:只要我們使用傳送者的公鑰解密數字簽名,得到原摘要內容,再跟我們自己進行訊息摘要的內容進行對比,就能判斷,若一致,則說明資訊內容沒篡改破壞過。
不可抵賴性:由於傳送者的私鑰只有傳送者自己知道,所以只要資訊比對一致,就能證明這資訊是該傳送方寫的。
看到這裡,讀者可能有點懵,那數字簽名跟數字證書有什麼不同?
數字簽名一般是使用者用自己的私鑰加密摘要生成的,目的是為了資料完整性保護和不可抵賴性。
數字證書是使用CA的私鑰加密你的資訊形成的,目的是證明你的身份。
HTTPS的技術實現
在上集的例子中,小明給小紅傳紙條,但是小明的明文通訊可能會被第四排同學竊聽、篡改、破壞、偽裝,而對應的解決方法就是使得通訊規則能有這三個功能:加密資料、資料完整性保護、身份驗證。
那該如何使得通訊規則有這三個功能?小明在研究了前置技術的內容後,受到啟發,決定這樣幹:
(這裡假設學校有個大隊長(即CA)能夠為學生資訊做公證,即頒發數字證書,小明小紅都已經申請了自己的數字證書。數字證書中包含自己的姓名、自己的公鑰等資訊)
1 在開始傳對話內容前,小明就先傳紙條請求小紅的數字證書,請求時也把自己的數字證書傳過去。
2 小紅收到資訊後,就用大隊長的公鑰解密得到資訊,得知是小明請求與她傳紙條,於是她含羞的把自己的數字證書回傳了過去。
3 小明得到返回的數字證書後,也用大隊長的公鑰解密得到資訊(資訊含有小紅姓名和小紅公鑰),比對姓名資訊看是否為小紅。如果不是小紅,則不通訊,如果是,進入下一步。
4 小明隨機生成一串字元a,然後拿出小紅的公鑰,並用該公鑰加密這串字元a,返回給小紅。
5 小紅收到資訊就用自己的私鑰進行解密,然後取出字元a,隨後小紅將內容 “同意傳紙條” 用字元a作為金鑰進行對稱加密,得到密文後寫入紙條中。另外,小紅也對內容 “同意傳紙條”進行訊息摘要,隨後用自己的私鑰對摘要的內容進行加密得到數字簽名,寫入紙條署名處。
6 小明收到資訊,用字元a作為金鑰進行對稱解密,得到內容“同意傳紙條”。為了鑑別內容是否被破壞或篡改過,小明使用小紅的公鑰對署名的字元進行解密,得到訊息摘要內容a,另外再將內容“同意傳紙條”進行訊息摘要得到訊息摘要b,最後將摘要內容a和摘要內容b進行比對,如果一致,則說明沒有破壞或篡改過。
7 通訊繼續。。
至此上面幾個步驟,就完成了安全的連線和通訊:雙方都使用字元a作為金鑰對內容進行對稱加密,另外生成數字簽名寫在一旁用於校驗內容。
身份驗證的實現:
此前小明不是怕第四排同學偽裝成小紅回紙條資訊嗎?
現在有了數字證書的功能,在一開始準備傳對話內容前就可以通過CA公鑰解密數字證書,得出資訊來辨別對方身份。
萬惡的第四排同學(中間人)再也無法偽裝女神小紅了!
注:HTTPS機制非常重要的一點就是假定CA的私鑰是安全的,如果洩露了,HTTPS的安全性機制將土崩瓦解。所以CA一般是大公司或組織,因為它們更有能力保護自己的私鑰,因此瀏覽器信任的CA列表往往是一些知名CA。
資料加密的實現:
此前小明不是怕第四排同學竊聽紙條資訊嗎?
現在因為有了前面的身份驗證,也就確保得到了真實對方的公鑰,並能利用該公鑰加密傳輸即將用於對稱加密對話內容的金鑰(例子中的字元a)。只要這個對稱金鑰被安全傳輸了,後面進行紙條內容的加密也就被高效的實現了。
萬惡的第四排同學(中間人)再也不無法偷看我的紙條小祕密了!
注:這裡可能會有同學問,既然雙方都知道彼此的公鑰後,那為何不直接拿對方的公鑰來加密自己要發出的資訊?這個確實可以,但是卻忽略了高效性,前面已經提到過,非對稱加密演算法比對稱加密演算法效率要低,考慮到後續通訊的頻繁性,所以最好使用對稱加密來對通訊內容進行加密。
資料完整性保護的實現:
此前小明不是怕第四排同學篡改或破壞紙條資訊嗎?
現在有了數字簽名,可與原有資訊進行對比,就可以判斷紙條內容有無被更改或破壞了。
萬惡的第四排同學(中間人)再也無法更改或破壞我對女神表達的情感了!
HTTPS的建立過程:
弄懂了上面小明傳紙條的例子,再來理解訪問使用 HTTPS 協議網站的建立過程,簡直就是易如反掌!
建立安全的HTTPS通訊,可防止中間人攻擊,這需要以下步驟:
1、服務端配置正確了對應的安全證書
2、客戶端傳送請求到服務端
3、服務端返回公鑰和證書到客戶端
4、客戶端接收後會驗證證書的安全性,如果通過則會隨機生成一個隨機數,用公鑰對其加密,傳送到服務端
5、服務端接受到這個加密後的隨機數後會用私鑰對其解密得到真正的隨機數,隨後用這個隨機數當做金鑰對需要傳送的資料進行對稱加密
6、客戶端在接收到加密後的資料使用金鑰(即生成的隨機值)對資料進行解密並且解析資料呈現結果給客戶
7、SSL加密建立。後續資料傳輸還將用到數字簽名技術。。
注:小明傳紙條的例子和使用者訪問網站有點不同:小明小紅互相傳紙條需要雙方互相進行身份驗證;而使用者訪問網站,只是使用者驗證網站,網站不驗證使用者。但無論哪種情況,使用的底層技術都是上面幾種,只是應用情況不同。
事件後續吃瓜
點選域名左邊的感嘆號標誌,就能檢視到該網站提供的證書資訊。
可以看到這個數字證書的簽發人資訊,從電子郵箱可以知道 QQ。後續網傳這QQ主人還是個初學計算機的高中生......
不過,“初學者”的猜測顯然不符合常理,“憑一己之力搞壞網路”所需要的智商,和“拿自己QQ郵箱簽名證書”所對應的智商,顯然不在同一個位面上。這不符合常理,事出反常必有妖。
最近,這位號主也發話澄清了。。
晚上,二毛坐在電腦桌前,看著萬家燈火,想象著二丫又搞懂了一些計算機知識點後,欣喜若狂、歡呼雀躍的樣子,不禁感到欣慰。
他隨後在電腦上敲下一行標題:跟零計算機基礎的房東女兒講了一下午的中間人劫持京東事件後,她感激涕零,決定給我免除房租。
哎,程式設計師的快樂,往往就是那麼樸實無華、枯燥且乏味。
往期精彩:
【故事】跟零計算機基礎的房東女兒講了一下午的中間人劫持京東事件後,她感激涕零,決定給我免除房租(上)
歡迎來到程式設計師二毛的世界,在這裡你將看到特點鮮明的人物、跌宕起伏且有趣的故事情節、通俗易懂的技術。
關注公眾號《程式設計師二毛》,後臺回覆 1024 領取變強祕籍。