簡(jiǎn)單粗暴系列之HTTPS原理

一、開篇
??簡(jiǎn)單粗暴,本文來聊聊HTTPS。
??啥是HTTPS? 說白了就是HTTP Over SSL。HTTP呢,就是我們平時(shí)上網(wǎng)時(shí),瀏覽器和服務(wù)器之間傳輸數(shù)據(jù)的一項(xiàng)協(xié)議。普通情況下,瀏覽器發(fā)送的請(qǐng)求會(huì)經(jīng)過若干個(gè)網(wǎng)絡(luò)中間節(jié)點(diǎn),最后到達(dá)服務(wù)器;然后服務(wù)器又將請(qǐng)求的數(shù)據(jù)經(jīng)過若干個(gè)網(wǎng)絡(luò)中間節(jié)點(diǎn)發(fā)送回給瀏覽器,這時(shí)候?yàn)g覽器就能夠顯示我們想要看到的頁面。
??這個(gè)過程中,其實(shí)并沒有存在什么太大的問題。問題出在,如果我們需要在網(wǎng)頁上輸入一些敏感信息,如我們的銀行卡賬號(hào)和密碼,發(fā)送給服務(wù)器,就會(huì)在中間節(jié)點(diǎn)中存在泄漏的風(fēng)險(xiǎn)。HTTPS就是為了保障傳輸過程中的安全目的而生的。HTTPS保證了數(shù)據(jù)僅僅只在發(fā)送方和目的方雙方可見,而對(duì)中間任一一個(gè)節(jié)點(diǎn)都不可見。這是怎么實(shí)現(xiàn)的?我們來慢慢看。

二、故事
我們首先來看一個(gè)故事:
1)流程
??有兩個(gè)大師,他們需要經(jīng)常交流研究心得,因此需要頻繁地進(jìn)行相互信件往來。在信件往來的過程中,我們假設(shè)發(fā)送方是大師A,而目的方是大師B。A想告訴B一些研究的最新成果,于是將相關(guān)的研究成果寫成了一封信,從郵局郵寄給B。這封信通過郵局的若干個(gè)快遞員,最終到達(dá)了B的手里。這樣就形成了一個(gè)最典型的數(shù)據(jù)傳輸過程。

2)加密、解密、密鑰、加密算法
??現(xiàn)在,大師A覺得,我寫的這封信,要是哪個(gè)快遞員打開看過了,我的最新研究成果不就泄漏了嗎?要是這個(gè)快遞員拿去賣錢我半輩子努力不就白費(fèi)了?于是乎大師A就想了個(gè)辦法,在書寫的過程中,每個(gè)字符都加4。如字符A就寫成E,字符B就寫成F,以此類推。大師B收到了信件后,再把每個(gè)字符都減去4,這樣就可以正確得到大師A想傳遞的研究成果的內(nèi)容。而最重要的是,即使快遞員在中間拆開信件,如果不知道4這個(gè)數(shù)字,是無法正確的到信件內(nèi)容的。
??我們將大師A每個(gè)字符加4的過程,叫做“加密”;大師B每個(gè)字符減4的過程,叫做“解密”;而數(shù)字4,就是我們常說的密鑰。而這種加密算法,名為凱撒算法。

3)證書
??就這樣,平安地度過了一段時(shí)間,直到突然有一天大師B收到一封來自于大師A的信,但是大師B使用之前的方式怎么也明白不了大師A說的是什么。于是電話詢問大師A關(guān)于這封信的內(nèi)容。結(jié)果大師A說,這不是我寫的啊。這才發(fā)現(xiàn),大師B收到的是一封偽造大師A的來信。為防止以上事情再次發(fā)生,大師A與大師B商量說,以后每封信上,我都會(huì)簽上自己特有的簽名,并帶上相關(guān)內(nèi)容的HASH值。
??HASH值用來校驗(yàn)這封信是否有被篡改過,而簽名類似于指紋,用來標(biāo)示這封信是否真實(shí)來自于指紋上所指向的人。一般來說,簽名的內(nèi)容中會(huì)包含這封信的發(fā)件方地址等信息。大師B收到信件后第一時(shí)間通過內(nèi)容的HASH值來校驗(yàn)信件的內(nèi)容長(zhǎng)度;通過簽名來校驗(yàn)發(fā)件方地址和指紋信息是否匹配。只有全部匹配才繼續(xù)用之前的密鑰進(jìn)行解密操作。
??這些標(biāo)明了大師A身份信息等信息的簽名,就是我們常說的證書。
??經(jīng)過以上的故事,我們大致明白了密鑰、加密解密、算法等必要的知識(shí)了。而HTTPS的過程其實(shí)和這個(gè)類似,只不過多了一些數(shù)學(xué)的描述。

三、HTTPS工作原理
??HTTPS工作在客戶端和服務(wù)器端之間。以上故事中,客戶端可以看作為大師A,服務(wù)器端可以看作為大師B。客戶端和服務(wù)器本身都會(huì)自帶一些加密的算法,用于雙方協(xié)商加密的選擇項(xiàng)。
1、客戶端首先會(huì)將自己支持的加密算法,打個(gè)包告訴服務(wù)器端。
2、服務(wù)器端從客戶端發(fā)來的加密算法中,選出一組加密算法和HASH算法(注,HASH也屬于加密),并將自己的身份信息以證書的形式發(fā)回給客戶端。而證書中包含了網(wǎng)站的地址,加密用的公鑰,以及證書的頒發(fā)機(jī)構(gòu)等;
??這里有提到公鑰的概念是故事中沒有的。我們常見的加密算法一般是一些對(duì)稱的算法,如凱撒加密;對(duì)稱算法即加密用的密鑰和解密用的密鑰是一個(gè)。如故事中的密鑰是4。還有一種加密解密算法稱之為非對(duì)稱算法。這種算法加密用的密鑰(公鑰)和解密用的密鑰(私鑰)是兩個(gè)不同的密鑰;通過公鑰加密的內(nèi)容一定要使用私鑰才能夠解密。
??這里,服務(wù)器就將自己用來加密用的公鑰一同發(fā)還給客戶端,而私鑰則服務(wù)器保存著,用戶解密客戶端加密過后的內(nèi)容。

3、客戶端收到了服務(wù)器發(fā)來的數(shù)據(jù)包后,會(huì)做這么幾件事情:
?1)驗(yàn)證一下證書是否合法。一般來說,證書是用來標(biāo)示一個(gè)站點(diǎn)是否合法的標(biāo)志。如果說該證書由權(quán)威的第三方頒發(fā)和簽名的,則說明證書合法。
?2)如果證書合法,或者客戶端接受和信任了不合法的證書,則客戶端就會(huì)隨機(jī)產(chǎn)生一串序列號(hào),使用服務(wù)器發(fā)來的公鑰進(jìn)行加密。這時(shí)候,一條返回的消息就基本就緒。
?3)最后使用服務(wù)器挑選的HASH算法,將剛才的消息使用剛才的隨機(jī)數(shù)進(jìn)行加密,生成相應(yīng)的消息校驗(yàn)值,與剛才的消息一同發(fā)還給服務(wù)器。

4、服務(wù)器接受到客戶端發(fā)來的消息后,會(huì)做這么幾件事情:
?1)使用私鑰解密上面第2)中公鑰加密的消息,得到客戶端產(chǎn)生的隨機(jī)序列號(hào)。
?2)使用該隨機(jī)序列號(hào),對(duì)該消息進(jìn)行加密,驗(yàn)證的到的校驗(yàn)值是否與客戶端發(fā)來的一致。如果一致則說明消息未被篡改,可以信任。
?3)最后,使用該隨機(jī)序列號(hào),加上之前第2步中選擇的加密算法,加密一段握手消息,發(fā)還給客戶端。同時(shí)HASH值也帶上。

5、客戶端收到服務(wù)器端的消息后,接著做這么幾件事情:
?1)計(jì)算HASH值是否與發(fā)回的消息一致
?2)檢查消息是否為握手消息

6、握手結(jié)束后,客戶端和服務(wù)器端使用握手階段產(chǎn)生的隨機(jī)數(shù)以及挑選出來的算法進(jìn)行對(duì)稱加解密的傳輸。
??為什么不直接全程使用非對(duì)稱加密算法進(jìn)行數(shù)據(jù)傳輸?這個(gè)問題的答案是因?yàn)榉菍?duì)稱算法的效率對(duì)比起對(duì)稱算法來說,要低得多得多;因此往往只用在HTTPS的握手階段。
??以下是我們一些經(jīng)常使用的加密算法,是不是有熟悉的味道?
???非對(duì)稱加密算法:RSA, DSA/DSS
???對(duì)稱加密算法: AES, 3DES
???HASH算法:MD5, SHA1, SHA256

這就是HTTPS的基本原理,如果沒有簡(jiǎn)單粗暴,請(qǐng)告訴我,以幫助我持續(xù)改進(jìn);如果真的簡(jiǎn)單粗暴,請(qǐng)告訴有需要的人,大家共同進(jìn)步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,506評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,402評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評(píng)論 0 287
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,596評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,784評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評(píng)論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,027評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評(píng)論 1 280
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,398評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,743評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容