HTTPS詳解

前言:在一個(gè)app運(yùn)行時(shí)期,由于android進(jìn)程隔離的原因,每個(gè)應(yīng)用都有自己獨(dú)立的內(nèi)存空間,其他應(yīng)用是無(wú)法直接訪問(wèn)的,當(dāng)然除非該APP對(duì)外提供接口,這樣的話,在app運(yùn)行時(shí)主要的安全隱患就在于對(duì)外的通訊上,而最主要的通訊也就是網(wǎng)絡(luò)通訊,在網(wǎng)絡(luò)通訊中數(shù)據(jù)從客戶端發(fā)送到服務(wù)端,中間會(huì)通過(guò)多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn),如何保證數(shù)據(jù)的安全需要考慮.

https.jpg

本章主要通過(guò)兩個(gè)方面來(lái)理解https
1.一步步還原h(huán)ttps的設(shè)計(jì)過(guò)程
2.根據(jù)設(shè)計(jì)過(guò)程來(lái)分析SSL在握手時(shí)所做的事情

在開(kāi)始之前需要明白幾個(gè)知識(shí)點(diǎn):

1.什么是第三方網(wǎng)絡(luò)節(jié)點(diǎn)?

當(dāng)我們通過(guò)網(wǎng)絡(luò)傳遞數(shù)據(jù)時(shí),數(shù)據(jù)不是直接從客戶端傳遞到服務(wù)端的,而是會(huì)經(jīng)過(guò)一些網(wǎng)絡(luò)節(jié)點(diǎn),比如說(shuō)路由器,代理服務(wù)器等,他們都屬于網(wǎng)絡(luò)節(jié)點(diǎn).
打個(gè)簡(jiǎn)單的比方:當(dāng)我們寄信件時(shí),我就相當(dāng)于客戶端,而收件人就相當(dāng)于服務(wù)端,中間經(jīng)過(guò)的所有快遞員都屬于第三方的網(wǎng)絡(luò)節(jié)點(diǎn).

2.如何保證數(shù)據(jù)的安全?

保證數(shù)據(jù)的安全需要從三方面,數(shù)據(jù)內(nèi)容的加密,通訊雙方的身份校驗(yàn),檢查數(shù)據(jù)的完整性
數(shù)據(jù)內(nèi)容的加密:通訊雙方協(xié)定一組加密算法,所有通訊的內(nèi)容通過(guò)這套算法加密后再進(jìn)行傳輸.相當(dāng)于在將信件的內(nèi)容加密,從而防止快遞員獲取信件上的內(nèi)容.
通訊雙方的身份校驗(yàn): 接到消息以后需要檢查發(fā)送方的身份.相當(dāng)于在接到信件時(shí)檢查寄件人的簽名,防止快遞員將信件調(diào)包.
數(shù)據(jù)內(nèi)容的完整性:保證數(shù)據(jù)不被篡改,就算被篡改,也可以察覺(jué).相當(dāng)于檢查信件的內(nèi)容是被修改,防止快遞員對(duì)信件內(nèi)容進(jìn)行修改.


有了以上的保證,可以滿足一條數(shù)據(jù)傳遞的安全性.

3.常用的加密算法

對(duì)稱加密:AES,DES等加密算法通過(guò)一個(gè)密鑰進(jìn)行加密和解密,計(jì)算速度快.但如果中介人獲取密鑰,則整個(gè)通訊就是不安全的.
非對(duì)稱加密:DES算法,生成公鑰和私鑰,客戶端通過(guò)公鑰加密,服務(wù)其通過(guò)私鑰解密,同理服務(wù)端通過(guò)私鑰加密,客戶端通過(guò)公鑰解密.好處相比與對(duì)稱加密更安全,但是運(yùn)算速度慢.
HASH加密算法:MD5,SHA1 加密得到一32位或者64位的值,也叫做數(shù)字指紋,這個(gè)過(guò)程是不可逆的.

有了以上的知識(shí)點(diǎn),我們來(lái)通過(guò)抽象的角度來(lái)模擬還原h(huán)ttps的設(shè)計(jì)過(guò)程.

1.為了保證數(shù)據(jù)的安全性,server端要求在發(fā)送數(shù)據(jù)包時(shí)的使用通過(guò)一套加密規(guī)則對(duì)內(nèi)容進(jìn)行加密,保證數(shù)據(jù)不會(huì)被泄露.
問(wèn)題:服務(wù)器和客戶端如果通過(guò)AES進(jìn)行加密.由于客戶端數(shù)量太多,如果所有的客戶端對(duì)服務(wù)器都使用同一套加密方法的話,整個(gè)通訊就顯得不安全了.

2.為了解決以上問(wèn)題,需要服務(wù)端為每個(gè)客戶端采用不同的加密規(guī)則,
問(wèn)題:但是如何協(xié)商這個(gè)規(guī)則又成了問(wèn)題,服務(wù)器不能直接將加密規(guī)則發(fā)送給客戶端,因?yàn)檫@樣會(huì)讓中間人(網(wǎng)絡(luò)結(jié)點(diǎn)獲取到加密規(guī)則).中間人一樣可以通過(guò)獲取的加密規(guī)則破解信息.


3.這時(shí)候我們不能將加密規(guī)則繼續(xù)加密,否則就會(huì)進(jìn)入死循環(huán)進(jìn)入雞生蛋,蛋生雞的問(wèn)題上了.為了解決這個(gè)問(wèn)題,用一套非對(duì)稱加密的算法給加密規(guī)則進(jìn)行加密.首先服務(wù)器為每個(gè)客戶端生成一個(gè)公鑰,將公鑰發(fā)送給客戶端,然后客戶端選擇一個(gè)支持的加密算法通過(guò)接受到的公鑰進(jìn)行加密發(fā)送給服務(wù)器,之后的通訊就按照這套加密算法來(lái)完成.這樣做的好處是:即使中間人獲取到了公鑰,他也無(wú)法獲取客戶端用公鑰加密的加密算法
問(wèn)題:但是卻由于一個(gè)問(wèn)題就是中間人可以將服務(wù)器發(fā)送的公鑰調(diào)包,而客戶端無(wú)法辨別發(fā)送到的公鑰是中間人的還是服務(wù)器的公鑰,這樣就造成中間人攻擊的漏洞.

中間人攻擊.jpeg

4.為了解決以上問(wèn)題,需要解決身份校驗(yàn)的問(wèn)題,而在HTTPS中解決身份校驗(yàn)問(wèn)題則使用權(quán)威的第三方機(jī)構(gòu)也就是CA機(jī)構(gòu)向安全的服務(wù)器來(lái)頒發(fā)證書證明身份的合法性,服務(wù)器通過(guò)CA辦法的證書將自己服務(wù)器的公鑰加密生成一個(gè)數(shù)字證書發(fā)送給客戶端,客戶端接受到數(shù)字證書以后通過(guò)第三方機(jī)構(gòu)的公鑰將數(shù)字證書解密,獲取服務(wù)器的公鑰,然后繼續(xù)走剛才說(shuō)的上面的流程.這樣就保證了這一次通訊的安全性.

這里涉及到兩個(gè)問(wèn)題:
4.1客戶端如何得到第三方機(jī)構(gòu)的公鑰?
一般在瀏覽器和操作系統(tǒng)上都會(huì)存放一些權(quán)威的第三方機(jī)構(gòu)的公鑰.
4.2如果惡意中間人得到第三方CA機(jī)構(gòu)的認(rèn)證會(huì)怎么辦?
如果惡意服務(wù)器獲取到CA頒發(fā)的證書的話,則這個(gè)CA機(jī)構(gòu)頒發(fā)的所有證書都會(huì)被視為不安全的,所以CA在頒發(fā)證書的時(shí)候一定特別小心.

5.由于CA機(jī)構(gòu)的認(rèn)證是收費(fèi)的,所以我們也可以自己制作證書,客戶端將證書的公鑰放入資源文件中,在驗(yàn)證數(shù)字證書合法性時(shí)通過(guò)自己制作的證書,而不是通過(guò)系統(tǒng)提供的CA頒發(fā)的公鑰,在使用自己證書的時(shí)候由于是在客戶端的包下,有可能會(huì)被一些不法的網(wǎng)站獲取后進(jìn)行中間人攻擊,所以需要對(duì)數(shù)字證書進(jìn)行數(shù)字簽名的驗(yàn)證,驗(yàn)證數(shù)字證書的方法很簡(jiǎn)單,數(shù)字證書中包含證書編號(hào),而這個(gè)證書編號(hào)是通過(guò)服務(wù)器的網(wǎng)址和證書的內(nèi)容通過(guò)加密算法得到的,客戶端只需要通過(guò)這個(gè)加密算法對(duì)證書進(jìn)行再一次的計(jì)算以后,然后與證書編號(hào)比對(duì)是否一樣.這樣就可以得知是否被篡改.




通過(guò)以上的了解相信大家對(duì)HTTPS的流程會(huì)有一點(diǎn)的了解,那么我們通過(guò)TLS/SSL建立鏈接時(shí)的握手過(guò)程來(lái)進(jìn)一步理解https



網(wǎng)絡(luò)分層模型.jpg



我們都知道Http的數(shù)據(jù)都是通過(guò)明文傳輸?shù)?而在HTTPS中真正起到加密的是TLS/SSL協(xié)議,而這個(gè)協(xié)議在網(wǎng)絡(luò)分層模型處于繪畫層的也就是在傳輸層TCP協(xié)議建立鏈接以后,在http協(xié)議傳遞數(shù)據(jù)之前.所以對(duì)于上層協(xié)議HTTP來(lái)他是無(wú)感知的.這就是網(wǎng)絡(luò)分層模型的優(yōu)點(diǎn).


https.jpg

我們通過(guò)上面的圖來(lái)分析一下SSL/TLS握手的過(guò)程

1.從藍(lán)色部分可以看出先通過(guò)TCP協(xié)議的三次握手建立TCP/IP的鏈接.SSL是在TCP鏈接之上進(jìn)行的.

2.Client Hello.:握手第一步是客戶端向服務(wù)端發(fā)送 Client Hello 消息绪囱,這個(gè)消息里包含了一個(gè)客戶端生成的隨機(jī)數(shù) Random1杉编、客戶端支持的加密算法和 SSL Version 等信息

3.ServerHello:服務(wù)器收到客戶端的Hello Client請(qǐng)求,取出Random1以及支持的加密算法,并生成一個(gè)隨機(jī)數(shù)Random2,然后從客戶端支持的加密算法中選出一種,發(fā)送給客戶端ServerHello.

4.Certificate:這一步是讓客戶端對(duì)服務(wù)器進(jìn)行身份校驗(yàn),服務(wù)端通過(guò)將自己的公鑰通過(guò)數(shù)字證書的方式發(fā)送給客戶端

5.Client Key Exchange:客戶端收到服務(wù)端傳來(lái)的證書后,先從 CA 驗(yàn)證該證書的合法性赘艳,驗(yàn)證通過(guò)后取出證書中的服務(wù)端公鑰斯够,再生成一個(gè)隨機(jī)數(shù) Random3,再用服務(wù)端公鑰非對(duì)稱加密 Random3 生成 PreMaster Key六剥。并將PreMaster Key發(fā)送到服務(wù)端,服務(wù)端通過(guò)私鑰將PreMaster Key解密獲取到Random3,此時(shí)客戶端和服務(wù)器都持有三個(gè)隨機(jī)數(shù)Random1 Random2 Random3,雙方在通過(guò)這三個(gè)隨即書生成一個(gè)對(duì)稱加密的密鑰.雙方根據(jù)這三個(gè)隨即數(shù)聽(tīng)過(guò)相同的算法生成一個(gè)密鑰,而以后應(yīng)用層傳輸?shù)臄?shù)據(jù)都使用這套密鑰進(jìn)行加密.
6.Change Cipher Spec:告訴客戶端以后的通訊都使用這一套密鑰來(lái)進(jìn)行.

以上就是一個(gè)簡(jiǎn)單的TLS/SSL握手過(guò)程.其實(shí)https就是在Http的基礎(chǔ)上加入TLS/SSL來(lái)保證數(shù)據(jù)的安全性.
用一句話總結(jié)https的的工作方式就是:

https要使客戶端與服務(wù)端通訊的安全保障,必須通過(guò)對(duì)稱加密來(lái)對(duì)內(nèi)容進(jìn)行處理,但是在協(xié)商對(duì)稱加密算法時(shí)需要用到不對(duì)稱加密來(lái)保障協(xié)商過(guò)程的安全,但是非對(duì)稱加密本身也是不安全的,可能會(huì)被中間人篡改公鑰而進(jìn)行中間人攻擊,而只能通過(guò)數(shù)字證書簽發(fā)機(jī)構(gòu)來(lái)對(duì)非對(duì)稱加密時(shí)的身份校驗(yàn)來(lái)保證非對(duì)稱加密本身的安全性,通過(guò)這套機(jī)制來(lái)協(xié)商出一套對(duì)稱加密的算法,而使http通訊時(shí)通過(guò)這套算法來(lái)對(duì)內(nèi)容進(jìn)行加密.

最后編輯于
?著作權(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)店門炉抒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人稚叹,你說(shuō)我怎么就攤上這事焰薄∧弥睿” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵塞茅,是天一觀的道長(zhǎng)亩码。 經(jīng)常有香客問(wèn)我,道長(zhǎng)野瘦,這世上最難降的妖魔是什么描沟? 我笑而不...
    開(kāi)封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮鞭光,結(jié)果婚禮上吏廉,老公的妹妹穿的比我還像新娘。我一直安慰自己惰许,他們只是感情好席覆,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著啡省,像睡著了一般娜睛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上卦睹,一...
    開(kāi)封第一講書人閱讀 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)封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤劲赠,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后秸谢,有當(dāng)?shù)厝嗽跇淞掷锇l(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)封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宏榕。三九已至,卻和暖如春侵佃,著一層夾襖步出監(jiān)牢的瞬間麻昼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 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)容