為什么 HTTPS 是安全的?

1. HTTP 協(xié)議
在談?wù)?HTTPS 協(xié)議之前,先來(lái)回顧一下 HTTP 協(xié)議的概念。
1.1 HTTP 協(xié)議介紹
HTTP 協(xié)議是一種基于文本的傳輸協(xié)議,它位于 OSI 網(wǎng)絡(luò)模型中的應(yīng)用層。

HTTP 協(xié)議是通過(guò)客戶(hù)端和服務(wù)器的請(qǐng)求應(yīng)答來(lái)進(jìn)行通訊,目前協(xié)議由之前的 RFC 2616 拆分成立六個(gè)單獨(dú)的協(xié)議說(shuō)明(RFC 7230、RFC 7231、RFC 7232、RFC 7233、RFC 7234、RFC 7235),通訊報(bào)文如下:
請(qǐng)求
POST http://www.baidu.com HTTP/1.1Host: www.baidu.comConnection: keep-aliveContent-Length: 7User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36wd=HTTP
響應(yīng)
HTTP/1.1 200 OKConnection: Keep-AliveContent-Encoding: gzipContent-Type: text/html;charset=utf-8Date: Thu, 14 Feb 2019 07:23:49 GMTTransfer-Encoding: chunked...
1.2 HTTP 中間人攻擊
HTTP 協(xié)議使用起來(lái)確實(shí)非常的方便,但是它存在一個(gè)致命的缺點(diǎn):不安全。
我們知道 HTTP 協(xié)議中的報(bào)文都是以明文的方式進(jìn)行傳輸,不做任何加密,這樣會(huì)導(dǎo)致什么問(wèn)題呢?下面來(lái)舉個(gè)例子:
小明在 JAVA 貼吧發(fā)帖,內(nèi)容為我愛(ài)JAVA:

被中間人進(jìn)行攻擊,內(nèi)容修改為我愛(ài)PHP

小明被群嘲
可以看到在 HTTP 傳輸過(guò)程中,中間人能看到并且修改 HTTP 通訊中所有的請(qǐng)求和響應(yīng)內(nèi)容,所以使用 HTTP 是非常的不安全的。
1.3 防止中間人攻擊
這個(gè)時(shí)候可能就有人想到了,既然內(nèi)容是明文那我使用對(duì)稱(chēng)加密的方式將報(bào)文加密這樣中間人不就看不到明文了嗎,于是如下改造:
雙方約定加密方式

使用 AES 加密報(bào)文




2. HTTPS 協(xié)議
2.1 HTTPS 簡(jiǎn)介

2.2 CA 認(rèn)證體系
上一節(jié)我們看到客戶(hù)端需要對(duì)服務(wù)器返回的 SSL 證書(shū)進(jìn)行校驗(yàn),那么客戶(hù)端是如何校驗(yàn)服務(wù)器 SSL 證書(shū)的安全性呢。
權(quán)威認(rèn)證機(jī)構(gòu)
在 CA 認(rèn)證體系中,所有的證書(shū)都是由權(quán)威機(jī)構(gòu)來(lái)頒發(fā),而權(quán)威機(jī)構(gòu)的 CA 證書(shū)都是已經(jīng)在操作系統(tǒng)中內(nèi)置的,我們把這些證書(shū)稱(chēng)之為CA根證書(shū):

簽發(fā)證書(shū)
我們的應(yīng)用服務(wù)器如果想要使用 SSL 的話(huà),需要通過(guò)權(quán)威認(rèn)證機(jī)構(gòu)來(lái)簽發(fā)CA證書(shū),我們將服務(wù)器生成的公鑰和站點(diǎn)相關(guān)信息發(fā)送給CA簽發(fā)機(jī)構(gòu),再由CA簽發(fā)機(jī)構(gòu)通過(guò)服務(wù)器發(fā)送的相關(guān)信息用CA簽發(fā)機(jī)構(gòu)進(jìn)行加簽,由此得到我們應(yīng)用服務(wù)器的證書(shū),證書(shū)會(huì)對(duì)應(yīng)的生成證書(shū)內(nèi)容的簽名,并將該簽名使用CA簽發(fā)機(jī)構(gòu)的私鑰進(jìn)行加密得到證書(shū)指紋,并且與上級(jí)證書(shū)生成關(guān)系鏈。
這里我們把百度的證書(shū)下載下來(lái)看看:


這里有趣的是,證書(shū)校驗(yàn)用的 RSA 是通過(guò)私鑰加密證書(shū)簽名,公鑰解密來(lái)巧妙的驗(yàn)證證書(shū)有效性。
這樣通過(guò)證書(shū)的認(rèn)證體系,我們就可以避免了中間人竊取AES_KEY從而發(fā)起攔截和修改 HTTP 通訊的報(bào)文。
總結(jié)
首先先通過(guò)對(duì) HTTP 中間人攻擊的來(lái)了解到 HTTP 為什么是不安全的,然后再?gòu)陌踩シ赖募夹g(shù)演變一直到 HTTPS 的原理概括,希望能讓大家對(duì) HTTPS 有個(gè)更深刻的了解。
來(lái)源:segmentfault.com/a/1190000023936425
版權(quán)申明:內(nèi)容來(lái)源網(wǎng)絡(luò),版權(quán)歸原創(chuàng)者所有。除非無(wú)法確認(rèn),我們都會(huì)標(biāo)明作者及出處,如有侵權(quán)煩請(qǐng)告知,我們會(huì)立即刪除并表示歉意。謝謝!

