HTTPS安全的原因
看了很多博客與文章,我的理解是 HTTPS 之所以安全是因?yàn)槎沤^了 HTTP 中可能的中間人攻擊。
為了實(shí)現(xiàn)上面這點(diǎn),HTTPS 增加了 SSL 層使用數(shù)字證書(shū)來(lái)進(jìn)行驗(yàn)證及分發(fā)需要使用到的公鑰。
下面是參考了很多文章的總結(jié),主要是解讀了一些比較容易模糊的點(diǎn):
- HTTP不安全的原因
- 數(shù)字證書(shū)的組成
- 數(shù)字證書(shū)的頒發(fā)以及驗(yàn)證過(guò)程
這里推薦幾篇文章:
- 這個(gè)是主要介紹HTTPS的 SSL層以及數(shù)字證書(shū)的
詳解https是如何確保安全的 - 分析Http協(xié)議可能出現(xiàn)的中間人攻擊,講的非常好
深入揭秘HTTPS安全問(wèn)題&連接建立全過(guò)程 - 這篇是生動(dòng)的解釋的文章
也許,這樣理解HTTPS更容易 - 知乎上的兩個(gè)討論
數(shù)字簽名、數(shù)字證書(shū)、SSL、https是什么關(guān)系?
數(shù)字證書(shū)的原理是什么?
HTTP不安全的原因
-
通過(guò)非對(duì)稱(chēng)加密獲取對(duì)稱(chēng)加密的公私鑰。后續(xù)主要的數(shù)據(jù)傳輸通過(guò)對(duì)稱(chēng)加密來(lái)實(shí)現(xiàn)。
在正常的情況下,HTTP協(xié)議的表現(xiàn)如下:
圖片.png 客戶(hù)端請(qǐng)求服務(wù)器發(fā)起SSL連接
服務(wù)器響應(yīng)公鑰給客戶(hù)端。私鑰只有服務(wù)器持有
客戶(hù)端使用公鑰加密對(duì)稱(chēng)密鑰,發(fā)送給服務(wù)器
后續(xù)的數(shù)據(jù)傳輸都使用對(duì)稱(chēng)密鑰加密
上面的過(guò)程會(huì)出現(xiàn)一個(gè)問(wèn)題。就是中間人偽造的問(wèn)題。

- 中間人可以截取客戶(hù)端的請(qǐng)求以及服務(wù)器的響應(yīng)。在獲取公鑰及發(fā)送對(duì)稱(chēng)加密密鑰的時(shí)候,都使用自己偽造的公鑰與對(duì)稱(chēng)密鑰進(jìn)行替換,成功截取到用戶(hù)的信息
上面的主要問(wèn)題是 公鑰 每個(gè)人都可以得到, 中間人可以自己偽造公鑰 代替服務(wù)器與中間人進(jìn)行通信。因此主要問(wèn)題是:怎樣明確確認(rèn)了公鑰是自己請(qǐng)求服務(wù)器的。
為了實(shí)現(xiàn)這點(diǎn),引入了第三方公正機(jī)構(gòu),服務(wù)器會(huì)發(fā)送一些信息去證書(shū)頒發(fā)機(jī)構(gòu)申請(qǐng)證書(shū),證書(shū)頒發(fā)機(jī)構(gòu)會(huì)驗(yàn)證申請(qǐng)者的身份并且根據(jù)一些信息生成證書(shū),里面包含了服務(wù)器的公鑰,用的加密算法,hash算法等信息,在響應(yīng)客戶(hù)端的請(qǐng)求會(huì)將證書(shū)發(fā)送給客戶(hù)端。讓客戶(hù)端驗(yàn)證證書(shū)是否是合法的證書(shū)。驗(yàn)證成功就使用證書(shū)中的公鑰進(jìn)行加密,算是建立起了連接。
下面看下數(shù)字證書(shū)的組成
數(shù)字證書(shū)的組成

- 數(shù)字摘要 = 明文 + hash運(yùn)算
- 數(shù)字簽名 = 數(shù)字摘要 + 非對(duì)稱(chēng)加密的私鑰加密(CA頒發(fā)機(jī)構(gòu)的私鑰)
- 數(shù)字證書(shū) = 非對(duì)稱(chēng)加密的公鑰(申請(qǐng)公鑰) + 數(shù)字簽名
數(shù)字簽名的作用:
- 數(shù)字簽名技術(shù)就是對(duì)“非對(duì)稱(chēng)密鑰加解密”和“數(shù)字摘要“兩項(xiàng)技術(shù)的應(yīng)用,它將摘要信息用發(fā)送者的私鑰加密,與原文一起傳送給接收者。
- 接收者只有用發(fā)送者的公鑰才能解密被加密的摘要信息,然后用HASH函數(shù)對(duì)收到的原文產(chǎn)生一個(gè)摘要信息,與解密的摘要信息對(duì)比。
- 如果相同,則說(shuō)明收到的信息是完整的,在傳輸過(guò)程中沒(méi)有被修改,否則說(shuō)明信息被修改過(guò),因此數(shù)字簽名能夠驗(yàn)證信息的完整性。
數(shù)字簽名的過(guò)程如下:
明文 --> hash運(yùn)算 --> 摘要 --> 私鑰加密 --> 數(shù)字簽名
如:某寶自己的認(rèn)證中心簡(jiǎn)稱(chēng)CA(Certificate Authority),CA給某寶頒發(fā)了一個(gè)證書(shū),這個(gè)證書(shū)有:
- 簽發(fā)者
- 證書(shū)用途
- 某寶的公鑰
- 某寶的加密算法
- 某寶用的HASH算法
- 證書(shū)的到期時(shí)間等
上面在證書(shū)中存在的明文,會(huì) HASH運(yùn)算生成 消息摘要,為了防止被篡改,會(huì)使用 CA機(jī)構(gòu)的私鑰加密,生成數(shù)字簽名
證書(shū)的作用
證書(shū)的頒發(fā)過(guò)程:
- 證書(shū)申請(qǐng)者首先產(chǎn)生非對(duì)稱(chēng)加密的公私鑰, 將公鑰與一些身份信息傳遞給證書(shū)認(rèn)證機(jī)構(gòu)。
- 證書(shū)在接受到請(qǐng)求后,會(huì)執(zhí)行一些操作對(duì)于用戶(hù)身份認(rèn)證的一些操作。
- 驗(yàn)證完成后,證書(shū)認(rèn)證機(jī)構(gòu)對(duì)于整個(gè)內(nèi)容使用私鑰加密生成數(shù)字證書(shū)返回給申請(qǐng)者
證書(shū)包含的內(nèi)容:
- 證書(shū)頒發(fā)機(jī)構(gòu)的名稱(chēng)
- 證書(shū)本身的數(shù)字簽名(使用CA機(jī)構(gòu)自己的私鑰加密)
- 證書(shū)持有者公鑰(申請(qǐng)者的公鑰)
- 證書(shū)簽名用到的Hash算法
驗(yàn)證證書(shū)的有效性
- 證書(shū)頒發(fā)的機(jī)構(gòu)是偽造的,瀏覽器不認(rèn)識(shí),直接認(rèn)為是危險(xiǎn)證書(shū)
- 證書(shū)頒發(fā)的機(jī)構(gòu)是存在的,在瀏覽器中找到該機(jī)構(gòu)的根證書(shū)。使用根證書(shū)中的公鑰對(duì)于數(shù)字簽名進(jìn)行解密:解密不成功,直接認(rèn)為是危險(xiǎn)證書(shū)
- 解密如果成功,會(huì)由數(shù)字簽名中得到信息摘要 A,然后根據(jù)證書(shū)中的 Hash 算法,對(duì)于證書(shū)重新進(jìn)行Hash運(yùn)算,得到信息摘要 B。如果 A 與 B相同,證明證書(shū)是正確的,否則證明信息被篡改
- 證書(shū)可在其過(guò)期前被吊銷(xiāo),通常情況是該證書(shū)的私鑰已經(jīng)失密。較新的瀏覽器如Chrome、Firefox、Opera和Internet Explorer都實(shí)現(xiàn)了在線(xiàn)證書(shū)狀態(tài)協(xié)議(OCSP)以排除這種情形:瀏覽器將網(wǎng)站提供的證書(shū)的序列號(hào)通過(guò)OCSP發(fā)送給證書(shū)頒發(fā)機(jī)構(gòu),后者會(huì)告訴瀏覽器證書(shū)是否還是有效的。
