HTTPS加密過(guò)程和TLS證書(shū)驗(yàn)證

前言

大家都知道,蘋(píng)果在2016年WWDC上宣布了關(guān)于應(yīng)用需要強(qiáng)制使用HTTPS的規(guī)定。這也算是個(gè)好消息吧,雖然開(kāi)發(fā)者們可能需要適配下HTTPS,但是我們的應(yīng)用可算是披上一個(gè)安全的保護(hù)罩了区拳。本篇文章就算是筆者在學(xué)習(xí)HTTPS過(guò)程中的一個(gè)記錄吧。

HTTPS加密過(guò)程

最近重新了解了下HTTPHTTPS: 首先二者都是網(wǎng)絡(luò)傳輸協(xié)議;HTTPS在傳輸過(guò)程中是可以通過(guò)加密來(lái)保護(hù)數(shù)據(jù)安全的意乓,以免用戶(hù)敏感信息被第三方獲取樱调。 可以說(shuō)HTTPSHTTP的升級(jí)版、安全版届良。下面我們就簡(jiǎn)單看下HTTPS的加密過(guò)程笆凌,先看下圖。

HTTPS加密過(guò)程
  1. 客戶(hù)端發(fā)起HTTPS請(qǐng)求
    這個(gè)沒(méi)什么好說(shuō)的士葫,就是用戶(hù)在瀏覽器里輸入一個(gè)HTTPS網(wǎng)址乞而,然后連接到服務(wù)端的443端口。
  2. 服務(wù)端的配置
    采用HTTPS協(xié)議的服務(wù)器必須要有一套數(shù)字證書(shū)慢显,可以自己制作爪模,也可以向組織申請(qǐng)。區(qū)別就是自己頒發(fā)的證書(shū)需要客戶(hù)端驗(yàn)證通過(guò)荚藻,才可以繼續(xù)訪(fǎng)問(wèn)屋灌,而使用受信任的公司申請(qǐng)的證書(shū)則不會(huì)彈出提示頁(yè)面。這套證書(shū)其實(shí)就是一對(duì)公鑰和私鑰应狱。如果對(duì)公鑰不太理解共郭,可以想象成一把鑰匙和一個(gè)鎖頭,只是世界上只有你一個(gè)人有這把鑰匙疾呻,你可以把鎖頭給別人除嘹,別人可以用這個(gè)鎖把重要的東西鎖起來(lái),然后發(fā)給你岸蜗,因?yàn)橹挥心阋粋€(gè)人有這把鑰匙憾赁,所以只有你才能看到被這把鎖鎖起來(lái)的東西。
  3. 傳送證書(shū)
    這個(gè)證書(shū)其實(shí)就是公鑰散吵,只是包含了很多信息,如證書(shū)的頒發(fā)機(jī)構(gòu),過(guò)期時(shí)間等等矾睦。
  4. 客戶(hù)端解析證書(shū)
    這部分工作是由客戶(hù)端的SSL/TLS來(lái)完成的晦款,首先會(huì)驗(yàn)證公鑰是否有效,比如頒發(fā)機(jī)構(gòu)枚冗,過(guò)期時(shí)間等等缓溅,如果發(fā)現(xiàn)異常,則會(huì)彈出一個(gè)警示框赁温,提示證書(shū)存在的問(wèn)題坛怪。如果證書(shū)沒(méi)有問(wèn)題,那么就生成一個(gè)隨機(jī)值股囊。然后用證書(shū)(也就是公鑰)對(duì)這個(gè)隨機(jī)值進(jìn)行加密袜匿。就好像上面說(shuō)的,把隨機(jī)值用鎖頭鎖起來(lái)稚疹,這樣除非有鑰匙居灯,不然看不到被鎖住的內(nèi)容。
  5. 傳送加密信息
    這部分傳送的是用證書(shū)加密后的隨機(jī)值内狗,目的是讓服務(wù)端得到這個(gè)隨機(jī)值怪嫌,以后客戶(hù)端和服務(wù)端的通信就可以通過(guò)這個(gè)隨機(jī)值來(lái)進(jìn)行加密解密了。
  6. 服務(wù)端解密信息
    服務(wù)端用私鑰解密后柳沙,得到了客戶(hù)端傳過(guò)來(lái)的隨機(jī)值岩灭,然后把內(nèi)容通過(guò)該隨機(jī)值進(jìn)行對(duì)稱(chēng)加密,將信息和私鑰通過(guò)某種算法混合在一起赂鲤,這樣除非知道私鑰噪径,不然無(wú)法獲取內(nèi)容,而正好客戶(hù)端和服務(wù)端都知道這個(gè)私鑰蛤袒,所以只要加密算法夠彪悍熄云,私鑰夠復(fù)雜,數(shù)據(jù)就夠安全妙真。
  7. 傳輸加密后的信息
    這部分信息就是服務(wù)端用私鑰加密后的信息缴允,可以在客戶(hù)端用隨機(jī)值解密還原。
  8. 客戶(hù)端解密信息
    客戶(hù)端用之前生產(chǎn)的私鑰解密服務(wù)端傳過(guò)來(lái)的信息珍德,于是獲取了解密后的內(nèi)容练般。整個(gè)過(guò)程第三方即使監(jiān)聽(tīng)到了數(shù)據(jù),也束手無(wú)策锈候。

到了這里薄料,HTTPS的整個(gè)加密過(guò)程也就差不多完成了,但是這個(gè)過(guò)程中是不是還有些概念還是不太清楚泵琳,比如SSL是什么摄职,TLS又是什么誊役,他們是怎么驗(yàn)證我們的證書(shū)是否有效的呢,它們的驗(yàn)證策略又是怎樣的呢谷市。別急蛔垢,下面我們就討論下TLS

TLS

剛開(kāi)始聽(tīng)到TLS的時(shí)候迫悠,你可能還不太熟悉鹏漆,但是說(shuō)起SSL你可能就覺(jué)得好耳熟了。其實(shí)TLS就是從SSL發(fā)展而來(lái)的创泄,只是SSL發(fā)展到3.0版本后改成了TLS艺玲。

TLS主要提供三個(gè)基本服務(wù)

  • 加密
  • 身份驗(yàn)證,也可以叫證書(shū)驗(yàn)證吧~
  • 消息完整性校驗(yàn)

第三個(gè)是網(wǎng)絡(luò)協(xié)議中常用的一個(gè)校驗(yàn)和機(jī)制鞠抑,我這我們就先按下不表饭聚。

加密

我們?cè)倏匆槐榭蛻?hù)端和服務(wù)端之間的加密機(jī)制:

TLS握手

TLS協(xié)議是基于TCP協(xié)議之上的,圖中第一個(gè)藍(lán)色往返是TCP的握手過(guò)程碍拆,之后兩次橙色的往返若治,我們可以叫做TLS的握手。握手過(guò)程如下:

  1. client1TLS版本號(hào)+所支持加密套件列表+希望使用的TLS選項(xiàng)
  2. Server1:選擇一個(gè)客戶(hù)端的加密套件+自己的公鑰+自己的證書(shū)+希望使用的TLS選項(xiàng)+(要求客戶(hù)端證書(shū))感混;
  3. Client2:(自己的證書(shū))+使用服務(wù)器公鑰和協(xié)商的加密套件加密一個(gè)對(duì)稱(chēng)秘鑰(自己生成的一個(gè)隨機(jī)值)端幼;
  4. Server2:使用私鑰解密出對(duì)稱(chēng)秘鑰(隨機(jī)值)后,發(fā)送加密的Finish消息弧满,表明完成握手

這里可能要提一下什么是對(duì)稱(chēng)加密和非對(duì)稱(chēng)加密:
一般的對(duì)稱(chēng)加密像這樣:

encrypt(明文婆跑,秘鑰) = 密文
decrypt(密文,秘鑰) = 明文

也就是說(shuō)加密和解密用的是同一個(gè)秘鑰庭呜。而非對(duì)稱(chēng)加密是這樣的:

encrypt(明文滑进,公鑰) = 密文
decrypt(密文,私鑰) = 明文

加密和解密是需要不同的秘鑰的募谎。

經(jīng)過(guò)這幾次握手成功后扶关,客服端和服務(wù)端之間通信的加密算法和所需要的密鑰也就確定下來(lái)了,之后雙方的交互都可以使用對(duì)稱(chēng)加密算法加密了数冬。

證書(shū)機(jī)制/證書(shū)驗(yàn)證

TLS中节槐,我們需要證書(shū)來(lái)保證你所訪(fǎng)問(wèn)的服務(wù)器是真實(shí)的,可信的拐纱。
看這張圖我們來(lái)討論下證書(shū)的驗(yàn)證過(guò)程铜异。

證書(shū)鏈
  1. 客戶(hù)端獲取到了站點(diǎn)證書(shū),拿到了站點(diǎn)的公鑰秸架;
  2. 要驗(yàn)證站點(diǎn)可信后揍庄,才能使用其公鑰,因此客戶(hù)端找到其站點(diǎn)證書(shū)頒發(fā)者的信息东抹;
  3. 站點(diǎn)證書(shū)的頒發(fā)者驗(yàn)證了服務(wù)端站點(diǎn)是可信的蚂子,但客戶(hù)端依然不清楚該頒發(fā)者是否可信沃测;
  4. 再往上回溯,找到了認(rèn)證了中間證書(shū)商的源頭證書(shū)頒發(fā)者缆镣。由于源頭的證書(shū)頒發(fā)者非常少芽突,我們?yōu)g覽器之前就認(rèn)識(shí)了,因此可以認(rèn)為根證書(shū)頒發(fā)者是可信的董瞻;
  5. 一路倒推,證書(shū)頒發(fā)者可信田巴,那么它所頒發(fā)的所有站點(diǎn)也是可信的钠糊,最終確定了我們所訪(fǎng)問(wèn)的服務(wù)端是可信的;
  6. 客戶(hù)端使用證書(shū)中的公鑰壹哺,繼續(xù)完成TLS的握手過(guò)程抄伍。

那么,客戶(hù)端是是如何驗(yàn)證某個(gè)證書(shū)的有效性管宵,或者驗(yàn)證策略是怎樣的?

證書(shū)頒發(fā)者一般提供兩種方式來(lái)驗(yàn)證證書(shū)的有效性:CRLOCSP截珍。

CRL

CRL(Certificate Revocation List)即證書(shū)撤銷(xiāo)名單。證書(shū)頒發(fā)者會(huì)提供一份已經(jīng)失效證書(shū)的名單箩朴,供瀏覽器驗(yàn)證證書(shū)使用岗喉。當(dāng)然這份名單是巨長(zhǎng)無(wú)比的,瀏覽器不可能每次TLS都去下載炸庞,所以常用的做法是瀏覽器會(huì)緩存這份名單钱床,定期做后臺(tái)更新。這樣雖然后臺(tái)更新存在時(shí)間間隔埠居,證書(shū)失效不實(shí)時(shí)查牌,但一般也OK。

OCSP

OCSP(Online Certificate StatusProtocol)即在線(xiàn)證書(shū)狀態(tài)協(xié)議滥壕。除了離線(xiàn)文件纸颜,證書(shū)頒發(fā)者也會(huì)提供實(shí)時(shí)的查詢(xún)接口,查詢(xún)某個(gè)特定證書(shū)目前是否有效绎橘。實(shí)時(shí)查詢(xún)的問(wèn)題在于瀏覽器需要等待這個(gè)查詢(xún)結(jié)束才能繼續(xù)TLS握手胁孙,延遲會(huì)更大。

以上是站點(diǎn)在證書(shū)頒發(fā)者的角度說(shuō)明會(huì)提供的兩種判斷方式金踪,實(shí)際情況下瀏覽器究竟會(huì)選擇哪種方式判斷浊洞,每個(gè)瀏覽器都會(huì)有自己的實(shí)現(xiàn)。下面是通過(guò)Chrome查看GitHub網(wǎng)站的證書(shū)信息:

證書(shū)例子

到這里差不多了胡岔,有什么不對(duì)的地方法希,歡迎大家留言指出,一起學(xué)習(xí)進(jìn)步靶瘸!

筆者不才苫亦,有些地方還是理解不到位毛肋,若有不正之處,還請(qǐng)耐心指出屋剑,輕噴~润匙。

參看文章

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唉匾,隨后出現(xiàn)的幾起案子孕讳,更是在濱河造成了極大的恐慌,老刑警劉巖巍膘,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厂财,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡峡懈,警方通過(guò)查閱死者的電腦和手機(jī)璃饱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)肪康,“玉大人荚恶,你說(shuō)我怎么就攤上這事×字В” “怎么了谒撼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)齐唆。 經(jīng)常有香客問(wèn)我嗤栓,道長(zhǎng),這世上最難降的妖魔是什么箍邮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任茉帅,我火速辦了婚禮,結(jié)果婚禮上锭弊,老公的妹妹穿的比我還像新娘堪澎。我一直安慰自己,他們只是感情好味滞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布樱蛤。 她就那樣靜靜地躺著,像睡著了一般剑鞍。 火紅的嫁衣襯著肌膚如雪昨凡。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天蚁署,我揣著相機(jī)與錄音便脊,去河邊找鬼。 笑死光戈,一個(gè)胖子當(dāng)著我的面吹牛哪痰,可吹牛的內(nèi)容都是我干的遂赠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晌杰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跷睦!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肋演,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抑诸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后惋啃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哼鬓,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年边灭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片健盒。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡绒瘦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扣癣,到底是詐尸還是另有隱情惰帽,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布父虑,位于F島的核電站该酗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏士嚎。R本人自食惡果不足惜呜魄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望莱衩。 院中可真熱鬧爵嗅,春花似錦、人聲如沸笨蚁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)括细。三九已至伪很,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奋单,已是汗流浹背锉试。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辱匿,地道東北人键痛。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓炫彩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親絮短。 傳聞我的和親對(duì)象是個(gè)殘疾皇子江兢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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