趣解HTTPS

1.飯前小菜:http和https知識點

HTTP(全稱:HyperText Transfer Protocol)超文本傳輸協議,基於TCP實現的應用層協議。運行在TCP之上,所有傳輸的內容都是明文的,客戶端和服務器端都無法驗證對方的身份。

HTTPS(全稱:Hypertext Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。

HTTPS是一種基於SSL/TLS的HTTPS協議,所有的HTTPS數據都是在SSL/TLS協議封裝之上傳輸的。其在HTTPS協議的基礎上,添加了SSL/TLS握手以及數據加密傳輸。

使用HTTP協議時,HTTP直接和TCP通信。當使用SSL時,則演變成先和SSL通信,再由SSL跟TCL通信,用 SSL 建立安全通信線路之後,就可以在這條線路上進行 HTTP 通信了。


趣解HTTPS


SSL/TLS中使用了非對稱加密,對稱加密以及HASH算法。其中非對稱加密算法用於在握手過程中加密生成的秘鑰,對稱加密算法用於對真正傳輸的數據進行加密,而HASH算法用於驗證數據的一致性、完整性。

(1)對稱加密:對稱加密是指加密和解密使用的密鑰是同一個密鑰,或者可以相互推算,雙向可逆加解密的。

對稱加密的優點是算法簡單,加解密效率高,系統開銷小,適合對大數據量加密。

缺點是解密加密使用同一個密鑰,需要考慮遠程通信的情況下如何安全的交換密鑰,如果密鑰丟失,所謂的加密解密就失效了。

(2)非對稱加密:非對稱加密和解密使用的密鑰不是同一密鑰,其中一個對外界公開,被稱為公鑰,另一個只有所有者知道,稱作私鑰。用公鑰加密的信息必須用私鑰才能解開,反之,用私鑰加密的信息只有用公鑰才能解開,為不可逆加解密。

(3)基於HASH散列函數驗證信息的完整性,驗證消息摘要的一致性。

2.硬菜上桌:詳解HTTPS傳輸過程

小艾:客戶端。小斯:服務端。

小艾小斯分隔兩地,平時都用書信來交流聯繫,相談甚歡。

有一天,他兩談論到銀行卡密碼等機密文件時,小艾突然意識到:我們這麼明目張膽的把銀行卡密碼寫在書信上,豈不是很容易被信差看到了?(HTTP通信、中間人劫持)

小斯眉頭一皺而後嘴角微微上揚:有道理有道理。這樣,你定一個只屬於你和我知道的秘鑰A,告訴我,然後我們書信上的消息都用這個秘鑰A進行加密解密,就算信差看到了,沒有這個秘鑰A解密,他也看不懂書信上加密後的書文。(對稱加密)

小艾表示還有個問題:那我要先把秘鑰A通過書信告訴你,如果信差半路把我的秘鑰A偷換成他的秘鑰AB,而你誤以為收到的秘鑰AB就是我的秘鑰A,使用秘鑰AB加密書信,信差再用他的秘鑰AB將你的書信解密並用我的秘鑰A加密其他的消息後再發給我,致使我們接下來的通信都被信差在中間經手擺了一道,我們收到的消息都不是我們最初書寫的信息。

雙手摩擦的小斯想了會,雙手一拍:有了,給通信的書信加個保險櫃;我們各自定義一對密碼(公鑰C和私鑰D),用公鑰C加密的信息必須用私鑰D才能解開,反之,用私鑰D加密的信息只有用公鑰C才能解開。私鑰自己留著,公鑰告訴對方。這樣的話,就算信差知道了公鑰C也沒用,只有我們自己保留的私鑰D才能打開保險櫃。(非對稱加密)

小斯:但是會有個問題。。。

小艾:但是,每次通信打開保險櫃都要費上半天的,狠麻煩狠耗時啊。

小斯:聰明聰明,這也是我正要說的。為了解決你說的麻煩耗時問題,你可以把你的秘鑰A,使用我的公鑰C將其加密發過來,然後我用我的私鑰D解密知道你的秘鑰A後,接下來我們通信就都用秘鑰A來加解密通信,這樣只需使用一次保險櫃就行了,接下來通信也能比較快的。(非對稱加密+對稱加密)

小艾:還是你機智啊,這樣的套路都能被你想到,猴賽雷猴賽雷。

小斯:想想,你覺得這樣還有沒什麼破綻沒?

小艾若有所思:沒啊!我覺得這樣的解決方案狠ok了啊。

哈哈一笑的小斯解釋道:再想一想的。假如呢,這個保險櫃直接被信差換成他自己的保險櫃呢,也就是截取了我發給你的公鑰D換成他自己的公鑰E,你用他的公鑰E加密你的秘鑰A,他就能中途截取用他自己的私鑰F解開保險櫃拿到你的秘鑰A,偷換個秘鑰G後再用我的公鑰D加密發回給我,那我們接下來的通信其實用的都是他的秘鑰G,而不是你的秘鑰A了。(中間人劫持、攻擊)

憤憤不平的小艾苦惱道:真是道高一尺魔高一丈啊,難道就沒有辦法讓我們安安穩穩舒舒心心的通信了嗎?

小斯雙手抱懷:當然有啦。只要我們找個公認的郵局機構,每次正式通信前,帶著郵局機構頒發的令牌(數字證書)去找郵局機構,再進行下風險的評估和資質的認證,郵寄機構認證了保險櫃的安全性和正確性之後,我們就可以繼續用剛提到的方案進行通信了。(數字證書+非對稱加密+對稱加密)

3.廚師解答食譜:CA證書和HTTPS通信原理

經過TCP的三次握手建立連接後,還要經過HTTPS 的四次握手:

1.客戶端: 你好,我要發起一個 HTTPS 請求,請給我你的公鑰

2.服務器: 好的,這是我的證書,裡面還有加密後我的公鑰

3.客戶端: 解密成功以後告訴服務器: 這是我的 (用公鑰加密後的) 對稱秘鑰。

4.服務器: 好的,我知道你的秘鑰了,後續就用它來加密解密消息傳輸。

第2步操作:此處的證書,就是數字證書(原始信息Z+數字簽名Y);服務端收到客戶端的請求後,會將例如ip、域名等原始信息Z進行HASH算法生成一個消息摘要X,然後讓有公信力的認證中心(簡稱CA)用其私鑰對消息摘要X進行加密,生成個數字簽名Y,最後將原始信息Z和Y合成數字證書發送給客戶端。


趣解HTTPS


第3步操作:客戶端在收到數字證書後,將數字簽名Y到認證中心(CA)用其公鑰解開,得到消息摘要X;然後再根據約定的HASH算法將原始信息Z進行HASH計算得到消息摘要O,最後將X和O進行對比,如果一樣,就說明是真正的服務器發送的消息;不相等就說明消息被劫持過,拒絕結束此次的請求。證明是真身之後,就用服務端給的公鑰對自己生產的對稱秘鑰加密,發送給服務端。


趣解HTTPS


4.結賬散場


趣解HTTPS



分享到:


相關文章: