概述
網(wǎng)絡(luò)請(qǐng)求方式通常分為兩種,分別是HTTP請(qǐng)求和HTTPS請(qǐng)求,其中HTTP的傳輸屬于明文傳輸,在傳輸?shù)倪^(guò)程中容易被人截取并且偷窺其中的內(nèi)容,而HTTPS是一種在HTTP的基礎(chǔ)上加了SSL/TLS層(安全套接層)的安全的超文本傳輸協(xié)議,其傳輸?shù)膬?nèi)容是通過(guò)加密得到的,所以說(shuō)是一種安全的傳輸
https?
HTTP 通信接口部分采用了了 SSL + TLS 協(xié)議
概念解析
密鑰: 對(duì)稱加密設(shè)置的密碼
公鑰: 公鑰用于加密信息和解密數(shù)字簽名
私鑰: 私鑰用于解密信息和加密消息摘要
消息摘要/數(shù)字指紋 : 對(duì)消息使用HASH算法獲取的固定長(zhǎng)度的字符串
數(shù)字簽名: 使用私鑰加密的消息摘要
數(shù)字證書(shū):CA用自己的私鑰,對(duì)需要認(rèn)證的公鑰及相關(guān)的信息進(jìn)行加密
一、加密方式
1、對(duì)稱加密:
私鑰加密,信息的發(fā)送方和接收方使用同一個(gè)密鑰加密和解密數(shù)據(jù)。

2、非對(duì)稱加密:
生成兩把密鑰公鑰和私鑰。私鑰自己保存,公鑰用于公開(kāi)。可以用公鑰和私鑰中任何一個(gè)進(jìn)行加密,另一個(gè)解密。
具體有兩種情形:
(1)對(duì)方用你的公鑰加密信息,你收到后用私鑰解開(kāi)。
只有你有私鑰,所以只有你能解開(kāi),換句話說(shuō),有私鑰才能看到信息,很安全。

(2)你拿私鑰加密信息,對(duì)方收到后用你的公鑰解開(kāi)。
公鑰是公開(kāi)的,所以其他人也可以看到你的信息,不保密。
私鑰加密,只有對(duì)應(yīng)公鑰能解開(kāi)。既然用你的公鑰能解開(kāi),說(shuō)明加密一定是你的私鑰。私鑰只有你有,所以一定是你發(fā)送的,你不可抵賴。

這里的私鑰加密指的是私鑰簽名,公鑰驗(yàn)簽

但是這樣存在一個(gè)問(wèn)題,竊聽(tīng)者也可以冒充Bob給Alice送信,因?yàn)锳lice的公鑰是公開(kāi)的,這樣就無(wú)法分辨哪個(gè)是真Bob的送信。
3、數(shù)字簽名:
為了表明信息沒(méi)有收到偽造,確實(shí)是信息擁有者發(fā)出??梢允褂脭?shù)字簽名。
Bob用自己的私鑰對(duì)消息加密作為簽名,再與消息一起發(fā)送,接收者用Bob的公鑰驗(yàn)簽。
竊聽(tīng)者竊取冒充Bob的簽名篡改內(nèi)容也沒(méi)用,因?yàn)閮?nèi)容發(fā)生改變時(shí),對(duì)應(yīng)的簽名也要重新計(jì)算,簽名的生成必須使用私鑰,只要私鑰不泄露,簽名就不會(huì)被冒充。

但是數(shù)字簽名只是能驗(yàn)證發(fā)送方身份,未對(duì)報(bào)文進(jìn)行加密。竊聽(tīng)者截取到密文并指定發(fā)送者的身份時(shí),可通過(guò)查閱手冊(cè)即可獲得發(fā)送者的公鑰PKA,就可以竊聽(tīng)報(bào)文的內(nèi)容。
4、數(shù)字證書(shū)(公鑰的數(shù)字簽名):
發(fā)送方可以去證書(shū)中心CA為公鑰做認(rèn)證,證書(shū)中心用自己的私鑰,對(duì)需要加密的公鑰和一些相關(guān)信息一起加密,生成"數(shù)字證書(shū)"。

這樣接收方就可以防止收到假的公鑰,接收方收到帶有數(shù)字證書(shū)的消息后,用CA的公鑰先解開(kāi)數(shù)字證書(shū),就可以拿到發(fā)送方真實(shí)的公鑰了。
5、非對(duì)稱算法的數(shù)字簽名:
即實(shí)現(xiàn)數(shù)字簽名又加密傳輸,就可以使用A私鑰簽名B公鑰加密的方法。

發(fā)送者使用私鑰對(duì)消息加密作為簽名,再使用接收方的公鑰對(duì)消息進(jìn)行加密,接收方使用自己的私鑰進(jìn)行解密后,再對(duì)簽名進(jìn)行驗(yàn)簽。
6、hash算法的數(shù)字簽名(摘要+數(shù)字簽名):
一般而言,不會(huì)直接對(duì)數(shù)據(jù)本身計(jì)算數(shù)字簽名,因?yàn)閿?shù)字簽名屬于非對(duì)稱加密,非對(duì)稱加密依賴于復(fù)雜的數(shù)學(xué)運(yùn)算,耗時(shí)久。所以使用摘要,并且摘要最好是不可逆轉(zhuǎn)的,一般使用開(kāi)頭MD5作為Hash函數(shù),MD5輸出的結(jié)果固定位128位。
并且要對(duì)數(shù)據(jù)的「摘要」進(jìn)行簽名,這樣,竊聽(tīng)者就算解開(kāi)簽名,拿到的也是「摘要」,如果摘要是不可逆轉(zhuǎn)的,也就是無(wú)法從摘要反推出原文,也就達(dá)到了保密的作用。
首先將原數(shù)據(jù)進(jìn)行Hash計(jì)算,得到摘要,再對(duì)摘要私鑰加密生成數(shù)字簽名。再與原文件一起發(fā)送。接收方收到后先用A的公鑰對(duì)數(shù)字簽名解密得到摘要1,證明確實(shí)是A發(fā)送,再對(duì)原文進(jìn)行相同的hash計(jì)算得到摘要2,再進(jìn)行比較,一致則證明消息未被篡改過(guò)。

但是若是竊聽(tīng)者將自己的公鑰換走了發(fā)送方的公鑰,再冒充發(fā)送方給B發(fā)送消息,用自己的私鑰做成假的簽名,此時(shí)接收方無(wú)法判斷哪個(gè)是真正的消息。
總結(jié):
對(duì)稱加密:同一個(gè)密碼加密解密。
非對(duì)稱加密:私鑰加密,公鑰解密或者私鑰加密,公鑰解密。
摘要:對(duì)消息hash計(jì)算生成摘要。
數(shù)字簽名:私鑰加密消息作為簽名,再與源文件一起發(fā)送。
數(shù)字證書(shū):證書(shū)中心對(duì)驗(yàn)簽的公鑰進(jìn)行加密,生成數(shù)字證書(shū)。用CA的公鑰解密得到加密的公鑰。
hash算法的數(shù)字簽名:對(duì)消息hash計(jì)算后再私鑰加密生成數(shù)字簽名。數(shù)字簽名+原文件一起發(fā)送。接收方再進(jìn)行比較。
非對(duì)稱加密的數(shù)字簽名:發(fā)送用私鑰加密得到數(shù)字簽名,再使用接收方的公鑰加密原文,一起發(fā)送,接收方使用發(fā)送方的公鑰驗(yàn)簽,證明是本人發(fā)送,再使用私鑰解密原文,進(jìn)行比較。一致則未被篡改。
二、HTTPS
HTTP協(xié)議:超文本傳輸協(xié)議,明文傳輸,客戶端與Web服務(wù)器間的應(yīng)用層通信協(xié)議。
HTTPS協(xié)議:HTTP+SSL/TLS,即HTTP下加入SSL層,使用SSL加密,用于安全的HTTP傳輸,https默認(rèn)使用端口443。
SSL:安全套接字層,位于可靠的面向連接的網(wǎng)絡(luò)層協(xié)議。SSL通過(guò)互相認(rèn)證、使用數(shù)字簽名確保完整性、使用加密確保私密性,以實(shí)現(xiàn)客戶端和服務(wù)器之間的安全通訊。具有數(shù)據(jù)加密和身份驗(yàn)證的功能。
TLS:安全傳輸層協(xié)議、對(duì)SSL擴(kuò)展和優(yōu)化,提供數(shù)據(jù)安全的同時(shí),確保數(shù)據(jù)的完整性。

https流程:
https作為一種安全的應(yīng)用層協(xié)議,使用了以下三種加密手段:
數(shù)據(jù)正文數(shù)據(jù)量較大,適用于對(duì)稱加密,因?yàn)閷?duì)稱加密速度快,適用于大量數(shù)據(jù)加密,但是安全級(jí)別低,密鑰在網(wǎng)絡(luò)中傳輸?shù)倪^(guò)程中容易被竊取,所以對(duì)這個(gè)密鑰進(jìn)行非對(duì)稱加密。
最后由于非對(duì)稱加密的公鑰在網(wǎng)絡(luò)中傳輸,保證接收方接收到正確的公鑰,使用證書(shū)驗(yàn)證:

1、客戶端發(fā)送HTTPS請(qǐng)求。
2、服務(wù)器收到請(qǐng)求后,返回?cái)?shù)字證書(shū)(數(shù)字簽名+公鑰)。
3、客戶端驗(yàn)證證書(shū)是否合法(用服務(wù)端的公鑰驗(yàn)簽),不合法則提示警告。
4、驗(yàn)證合法后,本地生成密鑰(對(duì)稱加密密鑰)并用服務(wù)端的提供的公鑰加密后發(fā)送給服務(wù)端。
5、服務(wù)端用自己的私鑰對(duì)數(shù)據(jù)解密,得到客戶端密鑰(對(duì)稱加密密鑰),再用客戶端密鑰對(duì)要發(fā)送的數(shù)據(jù)進(jìn)行加密后發(fā)給客戶端。
總結(jié):
發(fā)送https請(qǐng)求后,先驗(yàn)證CA證書(shū)是否和好,再生成本地密鑰(對(duì)稱密鑰),使用服務(wù)端公鑰加密對(duì)稱密鑰再發(fā)送服務(wù)端。服務(wù)端用自己的私鑰解密后,取得對(duì)稱密鑰,此時(shí)就可以數(shù)據(jù)傳輸了,服務(wù)端用對(duì)稱密鑰對(duì)請(qǐng)求數(shù)據(jù)加密,發(fā)送給客戶端,客戶端收到后用對(duì)稱密鑰解密拿到明文。
用基于數(shù)字證書(shū)的非對(duì)稱加密 加密 對(duì)稱加密的密鑰后 加密傳輸數(shù)據(jù)。
問(wèn)題小結(jié):
為什么數(shù)據(jù)傳輸是用對(duì)稱加密?
答:HTTP的應(yīng)用場(chǎng)景中通常端與端之間存在大量的交互,非對(duì)稱加密的加解密效率非常低。
另外,在 HTTPS的場(chǎng)景中只有服務(wù)端保存了私鑰,一對(duì)公私鑰只能實(shí)現(xiàn)單向的加解密,所以 HTTPS 中內(nèi)容傳輸加密采取的是對(duì)稱加密
為什么需要證書(shū)?
答:防止“中間人”攻擊,同時(shí)可以為網(wǎng)站提供身份證明。
使用 HTTPS 會(huì)被抓包嗎?
答:會(huì)被抓包,HTTPS 只防止用戶在不知情的情況下通信被監(jiān)聽(tīng),如果用戶主動(dòng)授信,是可以構(gòu)建“中間人”網(wǎng)絡(luò),代理軟件可以對(duì)傳輸內(nèi)容進(jìn)行解密。