通過一個(gè)小故事叠蝇,理解 HTTPS 工作原理

本文摘錄參考:

細(xì)說 CA 和證書主要講解 CA 的使用

數(shù)字簽名是什么?簡(jiǎn)單理解原理

深入淺出 HTTPS 工作原理深入理解原理

HTTP 協(xié)議由于是明文傳送铸鹰,所以存在三大風(fēng)險(xiǎn):

1癌别、被竊聽的風(fēng)險(xiǎn):第三方可以截獲并查看你的內(nèi)容

2、被篡改的危險(xiǎn):第三方可以截獲并修改你的內(nèi)容

3蹋笼、被冒充的風(fēng)險(xiǎn):第三方可以偽裝成通信方與你通信

HTTP 因?yàn)榇嬖谝陨先蟀踩L(fēng)險(xiǎn)展姐,所以才有了 HTTPS 的出現(xiàn)。

HTTPS 涉及到了很多概念剖毯,比如 SSL/TSL圾笨,數(shù)字證書、數(shù)字簽名逊谋、加密擂达、認(rèn)證、公鑰和私鑰等胶滋,比較容易混淆板鬓。我們先從一次簡(jiǎn)單的安全通信故事講起吧,其中穿插復(fù)習(xí)一些密碼學(xué)的概念究恤。

一俭令、關(guān)于 Bob 與他好朋友通信的故事

這個(gè)故事的原文是:

http://www.youdzone.com/signature.html

阮一峰老師也翻譯過:

http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

(不過阮老師里面沒有很好的區(qū)分加密和認(rèn)證的概念,以及最后 HTTPS 的說明不夠嚴(yán)謹(jǐn)部宿,評(píng)論區(qū)的針對(duì)這些問題的討論比較激烈抄腔,挺有意思的)

這里重新敘述一下這個(gè)故事:

故事的主人公是 Bob,他有三個(gè)好朋友 Pat、Doug 和 Susan赫蛇。Bob 經(jīng)常跟他們寫信绵患,因?yàn)樗男攀敲魑膫鬏數(shù)模趥鬟f過程可能被人截獲偷窺棍掐,也可能被人截獲然后又篡改了藏雏,更有可能別人偽裝成 Bob 本人跟他的好朋友通信拷况,總之是不安全的作煌。他很苦惱,經(jīng)過一番苦苦探索赚瘦,誒粟誓,他發(fā)現(xiàn)計(jì)算機(jī)安全學(xué)里有一種叫非對(duì)稱加密算法的東東,好像可以幫助他解決這個(gè)問題

說明:非對(duì)稱加密算法(RSA)是內(nèi)容加密的一類算法起意,它有兩個(gè)秘鑰:公鑰與私鑰鹰服。公鑰是公開的鑰匙,所有人都可以知道揽咕,私鑰是保密的悲酷,只有持有者知道。通過公鑰加密的內(nèi)容亲善,只能通過私鑰解開设易。非對(duì)稱加密算法的安全性很高,但是因?yàn)橛?jì)算量龐大蛹头,比較消耗性能顿肺。

好了,來看看 Bob 是怎么應(yīng)用非對(duì)稱加密算法與他的好朋友通信的:

1渣蜗、首先 Bob 弄到了兩把鑰匙:公鑰和私鑰屠尊;

2、Bob 自己保留下了私鑰耕拷,把公鑰復(fù)制成三份送給了他的三個(gè)好朋友 Pat讼昆、Doug 和 Susan;

3骚烧、此時(shí)浸赫,Bob 總算可以安心地和他的好朋友愉快地通信了。比如 Susan 要和他討論關(guān)于去哪吃午飯的事情止潘,Susan 就可以先把自己的內(nèi)容(明文)首先用 Bob 送給他的公鑰做一次加密掺炭,然后把加密的內(nèi)容傳送給 Bob。Bob 收到信后凭戴,再用自己的私鑰解開信的內(nèi)容涧狮;

說明:這其實(shí)是計(jì)算機(jī)安全學(xué)里加密的概念,加密的目的是為了不讓別人看到傳送的內(nèi)容,加密的手段是通過一定的加密算法及約定的密鑰進(jìn)行的(比如上述用了非對(duì)稱加密算法以及 Bob 的公鑰)者冤,而解密則需要相關(guān)的解密算法及約定的秘鑰(如上述用了非對(duì)稱加密算法和 Bob 自己的私鑰)肤视,可以看出加密是可逆的(可解密的)。

4涉枫、Bob 看完信后邢滑,決定給 Susan 回一封信。為了防止信的內(nèi)容被篡改(或者別人偽裝成他的身份跟 Susan 通信)愿汰,他決定先對(duì)信的內(nèi)容用 hash 算法做一次處理困后,得到一個(gè)字符串哈希值,Bob 又用自己的私鑰對(duì)哈希值做了一次加密得到一個(gè)簽名衬廷,然后把簽名和信(明文的)一起發(fā)送給 Susan摇予;

說明 2:Bob 的內(nèi)容實(shí)質(zhì)是明文傳輸?shù)模赃@個(gè)過程是可以被人截獲和窺探的吗跋,但是 Bob 不擔(dān)心被人窺探侧戴,他擔(dān)心的是內(nèi)容被人篡改或者有人冒充自己跟 Susan 通信。這里其實(shí)涉及到了計(jì)算機(jī)安全學(xué)中的認(rèn)證概念跌宛,Bob 要向 Susan 證明通信的對(duì)方是 Bob 本人酗宋,另外也需要確保自己的內(nèi)容是完整的。

5疆拘、Susan 接收到了 Bob 的信蜕猫,首先用 Bob 給的公鑰對(duì)簽名作了解密處理,得到了哈希值 A入问,然后 Susan 用了同樣的 Hash 算法對(duì)信的內(nèi)容作了一次哈希處理丹锹,得到另外一個(gè)哈希值 B,對(duì)比 A 和 B芬失,如果這兩個(gè)值是相同的楣黍,那么可以確認(rèn)信就是 Bob 本人寫的,并且內(nèi)容沒有被篡改過棱烂;

說明:4 跟 5 其實(shí)構(gòu)成了一次完整的通過數(shù)字簽名進(jìn)行認(rèn)證的過程租漂。數(shù)字簽名的過程簡(jiǎn)述為:發(fā)送方通過不可逆算法對(duì)內(nèi)容 text1 進(jìn)行處理(哈希),得到的結(jié)果值 hash1颊糜,然后用私鑰加密 hash1 得到結(jié)果值 encry1哩治。對(duì)方接收 text1 和 encry1,用公鑰解密 encry1 得到 hash1衬鱼,然后用 text1 進(jìn)行同等的不可逆處理得到 hash2业筏,對(duì) hash1 和 hash2 進(jìn)行對(duì)比即可認(rèn)證發(fā)送方。

6鸟赫、此時(shí)蒜胖,另外一種比較復(fù)雜出現(xiàn)了消别,Bob 是通過網(wǎng)絡(luò)把公鑰寄送給他的三個(gè)好朋友的,有一個(gè)不懷好意的家伙 Jerry 截獲了 Bob 給 Doug 的公鑰台谢。Jerry 開始偽裝成 Bob 跟 Doug 通信寻狂,Doug 感覺通信的對(duì)象不像是 Bob,但是他又無法確認(rèn)朋沮;

7蛇券、Bob 最終發(fā)現(xiàn)了自己的公鑰被 Jerry 截獲了,他感覺自己的公鑰通過網(wǎng)絡(luò)傳輸給自己的小伙伴似乎也是不安全的樊拓,不懷好意的家伙可以截獲這個(gè)明文傳輸?shù)墓€纠亚。為此他想到了去第三方權(quán)威機(jī)構(gòu)"證書中心"(certificate authority,簡(jiǎn)稱 CA)做認(rèn)證骑脱。證書中心用自己的私鑰對(duì) Bob 的公鑰和其它信息做了一次加密菜枷。這樣 Bob 通過網(wǎng)絡(luò)將數(shù)字證書傳遞給他的小伙伴后,小伙伴們先用 CA 給的公鑰解密證書叁丧,這樣就可以安全獲取 Bob 的公鑰了。

二岳瞭、HTTPS 通信過程

通過 Bob 與他的小伙伴的通信拥娄,我們已經(jīng)可以大致了解一個(gè)安全通信的過程,也可以了解基本的加密瞳筏、解密稚瘾、認(rèn)證等概念。HTTPS 就是基于這樣一個(gè)邏輯設(shè)計(jì)的姚炕。

首先看看組成 HTTPS 的協(xié)議:HTTP 協(xié)議和 SSL/TSL 協(xié)議摊欠。HTTP 協(xié)議就不用講了,而 SSL/TSL 就是負(fù)責(zé)加密解密等安全處理的模塊柱宦,所以 HTTPS 的核心在 SSL/TSL 上面些椒。整個(gè)通信如下:

1、瀏覽器發(fā)起往服務(wù)器的 443 端口發(fā)起請(qǐng)求掸刊,請(qǐng)求攜帶了瀏覽器支持的加密算法和哈希算法免糕。

2、服務(wù)器收到請(qǐng)求忧侧,選擇瀏覽器支持的加密算法和哈希算法石窑。

3、服務(wù)器下將數(shù)字證書返回給瀏覽器蚓炬,這里的數(shù)字證書可以是向某個(gè)可靠機(jī)構(gòu)申請(qǐng)的松逊,也可以是自制的。

4肯夏、瀏覽器進(jìn)入數(shù)字證書認(rèn)證環(huán)節(jié)经宏,這一部分是瀏覽器內(nèi)置的 TSL 完成的:

4.1 首先瀏覽器會(huì)從內(nèi)置的證書列表中索引楼咳,找到服務(wù)器下發(fā)證書對(duì)應(yīng)的機(jī)構(gòu),如果沒有找到烛恤,此時(shí)就會(huì)提示用戶該證書是不是由權(quán)威機(jī)構(gòu)頒發(fā)母怜,是不可信任的。如果查到了對(duì)應(yīng)的機(jī)構(gòu)缚柏,則取出該機(jī)構(gòu)頒發(fā)的公鑰苹熏。

4.2 用機(jī)構(gòu)的證書公鑰解密得到證書的內(nèi)容和證書簽名,內(nèi)容包括網(wǎng)站的網(wǎng)址币喧、網(wǎng)站的公鑰轨域、證書的有效期等。瀏覽器會(huì)先驗(yàn)證證書簽名的合法性(驗(yàn)證過程類似上面 Bob 和 Susan 的通信)杀餐。簽名通過后干发,瀏覽器驗(yàn)證證書記錄的網(wǎng)址是否和當(dāng)前網(wǎng)址是一致的,不一致會(huì)提示用戶史翘。如果網(wǎng)址一致會(huì)檢查證書有效期枉长,證書過期了也會(huì)提示用戶。這些都通過認(rèn)證時(shí)琼讽,瀏覽器就可以安全使用證書中的網(wǎng)站公鑰了必峰。

4.3 瀏覽器生成一個(gè)隨機(jī)數(shù) R,并使用網(wǎng)站公鑰對(duì) R 進(jìn)行加密钻蹬。

5吼蚁、瀏覽器將加密的 R 傳送給服務(wù)器。

6问欠、服務(wù)器用自己的私鑰解密得到 R肝匆。

7、服務(wù)器以 R 為密鑰使用了對(duì)稱加密算法加密網(wǎng)頁內(nèi)容并傳輸給瀏覽器顺献。

8旗国、瀏覽器以 R 為密鑰使用之前約定好的解密算法獲取網(wǎng)頁內(nèi)容。

備注 1:前 5 步其實(shí)就是 HTTPS 的握手過程滚澜,這個(gè)過程主要是認(rèn)證服務(wù)端證書(內(nèi)置的公鑰)的合法性粗仓。因?yàn)榉菍?duì)稱加密計(jì)算量較大,整個(gè)通信過程只會(huì)用到一次非對(duì)稱加密算法(主要是用來保護(hù)傳輸客戶端生成的用于對(duì)稱加密的隨機(jī)數(shù)私鑰)设捐。后續(xù)內(nèi)容的加解密都是通過一開始約定好的對(duì)稱加密算法進(jìn)行的借浊。

備注 2:SSL/TLS 是 HTTPS 安全性的核心模塊,TLS 的前身是 SSL萝招,TLS1.0 就是 SSL3.1蚂斤,TLS1.1 是 SSL3.2,TLS1.2 則是 SSL3.3槐沼。 SSL/TLS 是建立在 TCP 協(xié)議之上曙蒸,因而也是應(yīng)用層級(jí)別的協(xié)議捌治。其包括 TLS Record Protocol 和 TLS Handshaking Protocols 兩個(gè)模塊,后者負(fù)責(zé)握手過程中的身份認(rèn)證纽窟,前者則保證數(shù)據(jù)傳輸過程中的完整性和私密性肖油。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市臂港,隨后出現(xiàn)的幾起案子森枪,更是在濱河造成了極大的恐慌,老刑警劉巖审孽,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件县袱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡佑力,警方通過查閱死者的電腦和手機(jī)式散,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來打颤,“玉大人暴拄,你說我怎么就攤上這事∪陈澹” “怎么了揍移?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長反肋。 經(jīng)常有香客問我,道長踏施,這世上最難降的妖魔是什么石蔗? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮畅形,結(jié)果婚禮上养距,老公的妹妹穿的比我還像新娘。我一直安慰自己日熬,他們只是感情好棍厌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竖席,像睡著了一般耘纱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上毕荐,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天束析,我揣著相機(jī)與錄音,去河邊找鬼憎亚。 笑死员寇,一個(gè)胖子當(dāng)著我的面吹牛弄慰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝶锋,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼陆爽,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了扳缕?” 一聲冷哼從身側(cè)響起慌闭,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎第献,沒想到半個(gè)月后贡必,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庸毫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年仔拟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飒赃。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡利花,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出载佳,到底是詐尸還是另有隱情炒事,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布蔫慧,位于F島的核電站挠乳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姑躲。R本人自食惡果不足惜睡扬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍析。 院中可真熱鬧卖怜,春花似錦、人聲如沸阐枣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蔼两。三九已至甩鳄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宪哩,已是汗流浹背娩贷。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锁孟,地道東北人彬祖。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓茁瘦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親储笑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子甜熔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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

  • 前言 最近在面試中被問到了HTTPS的相關(guān)問題,加上密碼學(xué)也剛好學(xué)到公鑰密碼學(xué)突倍,我就趁熱打鐵腔稀,整理一下HTTPS相...
    卓三陽閱讀 2,955評(píng)論 0 5
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過一個(gè)加密通信過程的例子說明了加密算法的作用羽历,以及數(shù)字證書的出現(xiàn)...
    已認(rèn)證用戶閱讀 3,840評(píng)論 1 4
  • 數(shù)字證書原理 - 無恙 - 博客園 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念焊虏,然后通過一個(gè)加密通信過程的例子說明...
    拉肚閱讀 1,663評(píng)論 0 3
  • 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念,然后通過一個(gè)加密通信過程的例子說明了加密算法的作用秕磷,以及數(shù)字證書的出現(xiàn)...
    sunny沖哥閱讀 1,385評(píng)論 0 3
  • 原文地址:數(shù)字證書原理,公鑰私鑰加密原理 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念诵闭,然后通過一個(gè)加密通信過程的例...
    淇濱杜隆坦閱讀 4,162評(píng)論 4 46