超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息,HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報(bào)文叠骑,就可以直接讀懂其中的信息,因此削茁,HTTP協(xié)議不適合傳輸一些敏感信息宙枷,比如:信用卡號(hào)、密碼等支付信息付材。
為了解決HTTP協(xié)議的這一缺陷朦拖,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS。為了數(shù)據(jù)傳輸?shù)陌踩嵯危琀TTPS在HTTP的基礎(chǔ)上加入了SSL協(xié)議璧帝,SSL依靠證書(shū)來(lái)驗(yàn)證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密富寿。
一睬隶、HTTP和HTTPS的基本概念
HTTP:是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個(gè)客戶端和服務(wù)器端請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)页徐,用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議苏潜,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少变勇。
HTTPS:是以安全為目標(biāo)的HTTP通道恤左,簡(jiǎn)單講是HTTP的安全版贴唇,即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL飞袋,因此加密的詳細(xì)內(nèi)容就需要SSL戳气。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個(gè)信息安全通道,來(lái)保證數(shù)據(jù)傳輸?shù)陌踩裳迹涣硪环N就是確認(rèn)網(wǎng)站的真實(shí)性瓶您。
二、HTTP與HTTPS有什么區(qū)別纲仍?
HTTP協(xié)議傳輸?shù)臄?shù)據(jù)都是未加密的呀袱,也就是明文的,因此使用HTTP協(xié)議傳輸隱私信息非常不安全郑叠,為了保證這些隱私數(shù)據(jù)能加密傳輸夜赵,于是網(wǎng)景公司設(shè)計(jì)了SSL(Secure Sockets Layer)協(xié)議用于對(duì)HTTP協(xié)議傳輸?shù)臄?shù)據(jù)進(jìn)行加密,從而就誕生了HTTPS锻拘。
簡(jiǎn)單來(lái)說(shuō)油吭,HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議署拟,要比http協(xié)議安全婉宰。
HTTPS和HTTP的區(qū)別主要如下:
1、https協(xié)議需要到ca申請(qǐng)證書(shū)推穷,一般免費(fèi)證書(shū)較少心包,因而需要一定費(fèi)用。
2馒铃、http是超文本傳輸協(xié)議蟹腾,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議区宇。
3娃殖、http和https使用的是完全不同的連接方式,用的端口也不一樣议谷,前者是80炉爆,后者是443。
4卧晓、http的連接很簡(jiǎn)單芬首,是無(wú)狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸逼裆、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議郁稍,比http協(xié)議安全。
HTTP胜宇、HTTPS在我們?nèi)粘i_(kāi)發(fā)中是經(jīng)常會(huì)接觸到的耀怜。我們也都知道恢着,一般 Android 應(yīng)用開(kāi)發(fā),在請(qǐng)求 API 網(wǎng)絡(luò)接口的時(shí)候财破,很多使用的都是 HTTP 協(xié)議然评;使用瀏覽器打開(kāi)網(wǎng)頁(yè),也是利用 HTTP 協(xié)議狈究。看來(lái) HTTP 真是使用廣泛啊盏求,但是抖锥,HTTP 是不安全的。利用網(wǎng)絡(luò)抓包工具就可以知道傳輸中的內(nèi)容碎罚,一覽無(wú)余磅废。比如我經(jīng)常會(huì)使用 Fiddler 來(lái)抓包,搜集一些有趣的 API 接口荆烈。
那么問(wèn)題來(lái)了拯勉,如何保證 HTTP 的安全性呢?基本上所有的人都會(huì)脫口而出:使用 HTTPS 協(xié)議憔购。99.9% 的人都知道 HTTPS 會(huì)將傳輸?shù)膬?nèi)容進(jìn)行加密宫峦,但是接著問(wèn)具體加密的過(guò)程和步驟,很多人就啞口無(wú)言了玫鸟。
為了防止出現(xiàn)這種尷尬的局面导绷,所以今天你就要好好看看這篇的內(nèi)容了。以后就可以裝個(gè)逼屎飘,哈哈妥曲!
加密類型
先科普一下,加密算法的類型基本上分為了兩種:
對(duì)稱加密钦购,比較有代表性的就是 AES 加密算法檐盟;非對(duì)稱加密,經(jīng)常使用到的 RSA 加密算法就是非對(duì)稱加密的押桃;
對(duì)稱加密的意思就是說(shuō)雙方都有一個(gè)共同的密鑰葵萎,然后通過(guò)這個(gè)密鑰完成加密和解密,這種加密方式速度快怨规,但是安全性不如非對(duì)稱加密好陌宿。
舉個(gè)例子,現(xiàn)在學(xué)霸小明這里有一道數(shù)學(xué)題的答案:123 波丰。他想把答案?jìng)鹘o自己一直暗戀的小紅壳坪。所以他們雙方在考試開(kāi)考前,約定了一把密鑰:456 掰烟。那么小明就把答案內(nèi)容經(jīng)過(guò)密鑰加密爽蝴,即 123 + 456 = 579 沐批,將 579 寫(xiě)在小紙條上扔給小紅。如果此時(shí)別人撿到了小紙條蝎亚,不知道他們是加密傳輸?shù)木藕ⅲ吹缴厦娴?579 ,會(huì)誤以為答案就是 579 发框;如果是小紅撿到了躺彬,她拿出密鑰解密,579 - 456 = 123 梅惯,得到了正確的答案宪拥。
這就是所謂的對(duì)稱加密,加解密效率高铣减,速度快她君,但是雙方任何一方不小心泄露了密鑰,那么任何人都可以知道傳輸內(nèi)容了葫哗。
講完了對(duì)稱加密缔刹,我們看看啥是非對(duì)稱加密。
非對(duì)稱加密就是有兩把密鑰劣针,公鑰和私鑰校镐。私鑰自己藏著,不告訴任何人捺典;而公鑰可以公開(kāi)給別人灭翔。
經(jīng)過(guò)了上次作弊后,小紅發(fā)現(xiàn)了對(duì)稱加密如果密鑰泄露是一件可怕的事情辣苏。所以她和小明決定使用非對(duì)稱加密肝箱。小紅生成了一對(duì)公鑰和私鑰,然后把公鑰公開(kāi)稀蟋,小明就得到了公鑰煌张。小明拿到公鑰后,把答案經(jīng)過(guò)公鑰加密退客,然后傳輸給小紅骏融,小紅再利用自己的私鑰進(jìn)行解密,得到答案結(jié)果萌狂。如果在這個(gè)過(guò)程中档玻,其他人得到傳輸?shù)膬?nèi)容,而他們只有公鑰茫藏,是沒(méi)有辦法進(jìn)行解密的误趴,所以也就得不到答案,只有小紅一個(gè)人可以解密务傲。
因此凉当,相比較對(duì)稱加密而言枣申,非對(duì)稱加密安全性更高,但是加解密耗費(fèi)的時(shí)間更長(zhǎng)看杭,速度慢忠藤。
對(duì)稱加密和非對(duì)稱加密的具體應(yīng)用我還是深有體會(huì)的,因?yàn)樗诘墓臼亲鼋鹑谥Ц斗矫娴穆ケⅲ约咏饷芑旧纤闶翘焯煲?jiàn)了模孩。
說(shuō)完加密類型后,我們?cè)賮?lái)看看 HTTPS 贮缅。我們先來(lái)看一個(gè)公式:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? HTTPS = HTTP + SSL? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 從這個(gè)公式中可以看出瓜贾,HTTPS 和 HTTP 就差在了 SSL 上。所以我們可以猜到携悯,HTTPS 的加密就是在 SSL 中完成的。所以我們的目的就是要搞懂在 SSL 中究竟干了什么見(jiàn)不得人的事了筷笨?
這就要從 CA 證書(shū)講起了憔鬼。CA 證書(shū)其實(shí)就是數(shù)字證書(shū),是由 CA 機(jī)構(gòu)頒發(fā)的胃夏。至于 CA 機(jī)構(gòu)的權(quán)威性轴或,那么是毋庸置疑的,所有人都是信任它的仰禀。CA 證書(shū)內(nèi)一般會(huì)包含以下內(nèi)容:證書(shū)的頒發(fā)機(jī)構(gòu)照雁、版本證書(shū)的使用者、證書(shū)的公鑰答恶、證書(shū)的有效時(shí)間饺蚊、證書(shū)的數(shù)字簽名 Hash 值和簽名 Hash 算法…
正好我們把客戶端如何校驗(yàn) CA 證書(shū)的步驟說(shuō)下吧。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1).? CA 證書(shū)中的 Hash 值悬嗓,其實(shí)是用證書(shū)的私鑰進(jìn)行加密后的值(證書(shū)的私鑰不在 CA 證書(shū)中)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2).? 然后客戶端得到證書(shū)后污呼,利用證書(shū)中的公鑰去解密該 Hash 值,得到 Hash-a 包竹;? ? ? ? 3).? 然后再利用證書(shū)內(nèi)的簽名 Hash 算法去生成一個(gè) Hash-b;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4).? 最后比較 Hash-a 和 Hash-b 這兩個(gè)的值燕酷,如果相等,那么證明該證書(shū)是對(duì)的周瞎,服務(wù)端是可以被信任的苗缩;如果不相等,那么就說(shuō)明該證書(shū)是錯(cuò)誤的声诸,可能被篡改了酱讶,瀏覽器會(huì)給出相關(guān)提示,無(wú)法建立起 HTTPS 連接彼乌。除此之外浴麻,還會(huì)校驗(yàn) CA 證書(shū)的有效時(shí)間和域名匹配等得问。
接下來(lái)我們就來(lái)詳細(xì)講一下 HTTPS 中的 SSL 握手建立過(guò)程,假設(shè)現(xiàn)在有客戶端 A 和服務(wù)器 B :
1. 首先软免,客戶端 A 訪問(wèn)服務(wù)器 B 宫纬,比如我們用瀏覽器打開(kāi)一個(gè)網(wǎng)頁(yè) https://www.baidu.com ,這時(shí)膏萧,瀏覽器就是客戶端 A 漓骚,百度的服務(wù)器就是服務(wù)器 B 了。這時(shí)候客戶端 A 會(huì)生成一個(gè)隨機(jī)數(shù)1榛泛,把隨機(jī)數(shù)1 蝌蹂、自己支持的 SSL 版本號(hào)以及加密算法等這些信息告訴服務(wù)器 B 。
2. 服務(wù)器 B 知道這些信息后曹锨,確認(rèn)一下雙方的加密算法孤个,然后服務(wù)端也生成一個(gè)隨機(jī)數(shù) B ,并將隨機(jī)數(shù) B 和 CA 頒發(fā)給自己的證書(shū)一同返回給客戶端 A 沛简。
3.?客戶端 A 得到 CA 證書(shū)后齐鲤,會(huì)去校驗(yàn)該 CA 證書(shū)的有效性,校驗(yàn)方法在上面已經(jīng)說(shuō)過(guò)了椒楣。校驗(yàn)通過(guò)后给郊,客戶端生成一個(gè)隨機(jī)數(shù)3 ,然后用證書(shū)中的公鑰加密隨機(jī)數(shù)3 并傳輸給服務(wù)端 B 捧灰。服務(wù)端 B 得到加密后的隨機(jī)數(shù)3淆九,然后利用私鑰進(jìn)行解密,得到真正的隨機(jī)數(shù)3毛俏。
4. 最后炭庙,客戶端 A 和服務(wù)端 B 都有隨機(jī)數(shù)1、隨機(jī)數(shù)2煌寇、隨機(jī)數(shù)3煤搜,然后雙方利用這三個(gè)隨機(jī)數(shù)生成一個(gè)對(duì)話密鑰。之后傳輸內(nèi)容就是利用對(duì)話密鑰來(lái)進(jìn)行加解密了唧席。這時(shí)就是利用了對(duì)稱加密擦盾,一般用的都是 AES 算法。
5. 客戶端 A 通知服務(wù)端 B 淌哟,指明后面的通訊用對(duì)話密鑰來(lái)完成迹卢,同時(shí)通知服務(wù)器 B 客戶端 A 的握手過(guò)程結(jié)束。
6. 服務(wù)端 B 通知客戶端 A徒仓,指明后面的通訊用對(duì)話密鑰來(lái)完成腐碱,同時(shí)通知客戶端 A 服務(wù)器 B 的握手過(guò)程結(jié)束。
SSL 的握手部分結(jié)束,SSL 安全通道的數(shù)據(jù)通訊開(kāi)始症见,客戶端 A 和服務(wù)器 B 開(kāi)始使用相同的對(duì)話密鑰進(jìn)行數(shù)據(jù)通訊喂走。
到此,SSL 握手過(guò)程就講完了谋作∮蟪Γ可能上面的流程太過(guò)于復(fù)雜,我們簡(jiǎn)單地來(lái)講:
客戶端和服務(wù)端建立 SSL 握手:客戶端通過(guò) CA 證書(shū)來(lái)確認(rèn)服務(wù)端的身份遵蚜;互相傳遞三個(gè)隨機(jī)數(shù)帖池,之后通過(guò)這隨機(jī)數(shù)來(lái)生成一個(gè)密鑰;互相確認(rèn)密鑰吭净,然后握手結(jié)束睡汹;數(shù)據(jù)通訊開(kāi)始,都使用同一個(gè)對(duì)話密鑰來(lái)加解密寂殉;
我們可以發(fā)現(xiàn)囚巴,在 HTTPS 加密原理的過(guò)程中把對(duì)稱加密和非對(duì)稱加密都利用了起來(lái)。即利用了非對(duì)稱加密安全性高的特點(diǎn)友扰,又利用了對(duì)稱加密速度快彤叉,效率高的好處。
轉(zhuǎn)載自https://baijiahao.baidu.com/s?id=1595441779997706095&wfr=spider&for=pc
https://blog.csdn.net/xionghuixionghui/article/details/68569282