關(guān)于為什么使用
HTTPS,為什么選用對(duì)稱加密和非對(duì)稱加密混合方式,網(wǎng)上有很多,可以參考如下兩篇文章:
1.HTTPS 原理詳解
2.一個(gè)故事講完https
HTTPS的步驟
- 瀏覽器發(fā)起請(qǐng)求
http://www.itdecent.cn - 服務(wù)器發(fā)送一個(gè)SSL證書給瀏覽器,SSL 證書中包含的具體內(nèi)容有,SSL證書的公鑰使用非對(duì)稱加密算法:
(1)證書的發(fā)布機(jī)構(gòu)CA
(2)證書的有效期
(3)公鑰
(4)證書所有者
(5)簽名 - 瀏覽器驗(yàn)證證書是否有效
驗(yàn)證步驟有:
(1)首先瀏覽器讀取證書中的證書所有者、有效期等信息進(jìn)行一一校驗(yàn)
(2)瀏覽器開始查找操作系統(tǒng)中已內(nèi)置的受信任的證書發(fā)布機(jī)構(gòu)CA,與服務(wù)器發(fā)來(lái)的證書中的頒發(fā)者CA比對(duì),用于校驗(yàn)證書是否為合法機(jī)構(gòu)頒發(fā)
(3)如果找不到,瀏覽器就會(huì)報(bào)錯(cuò),說(shuō)明服務(wù)器發(fā)來(lái)的證書是不可信任的。
(4)如果找到,那么瀏覽器就會(huì)從操作系統(tǒng)中取出 頒發(fā)者CA 的公鑰,然后對(duì)服務(wù)器發(fā)來(lái)的證書里面的簽名進(jìn)行解密
(5)瀏覽器使用相同的hash算法計(jì)算出服務(wù)器發(fā)來(lái)的證書的hash值,將這個(gè)計(jì)算的hash值與證書中簽名做對(duì)比
(6)對(duì)比結(jié)果一致,則證明服務(wù)器發(fā)來(lái)的證書合法,沒有被冒充
(7)此時(shí)瀏覽器就可以讀取證書中的公鑰,用于后續(xù)加密了
(8)如果沒有驗(yàn)證通過(guò),瀏覽器就會(huì)報(bào)錯(cuò),而用戶選擇了“了解風(fēng)險(xiǎn),繼續(xù)操作”,瀏覽器依然會(huì)取出公鑰往下進(jìn)行。 - 瀏覽器隨機(jī)選擇一個(gè)對(duì)稱加密算法和秘鑰,用第2步證書中的公鑰加密,傳輸給服務(wù)器
- 服務(wù)器收到后,用非對(duì)稱加密算法的私鑰解密(只有私鑰能解密),獲得后續(xù)傳輸使用的對(duì)稱加密算法和秘鑰
- 瀏覽器和服務(wù)器使用該對(duì)稱加密算法和秘鑰加密后的內(nèi)容進(jìn)行傳輸。
使用Fiddler等代理的時(shí)候,是如何能攔截https請(qǐng)求的
- fiddler攔截https請(qǐng)求,替換SSL證書中的公鑰,改為自己的公鑰(因?yàn)橛霉€加密的內(nèi)容只有私鑰才能解密,所以fiddler要替換為自己的公鑰),因?yàn)樾薷牧薙SL證書的內(nèi)容,fiddler并用自己的私有CA私鑰對(duì)內(nèi)容進(jìn)行了重簽名,導(dǎo)致瀏覽器驗(yàn)證簽名無(wú)效,故需要安裝fiddler的根證書使瀏覽器信任該CA。
- 瀏覽器拿到的SSL證書中的公鑰(其實(shí)為fiddler的公鑰,并不是服務(wù)器的公鑰),進(jìn)行上述第4步操作
- fiddler攔截上述第4步操作,替換其中內(nèi)容,使用真正的服務(wù)器公鑰加密和服務(wù)器通信,此后的所有通信中,fiddler先對(duì)服務(wù)器內(nèi)容解密,然后在用瀏覽器的對(duì)稱算法和公鑰加密傳輸給瀏覽器。達(dá)到攔截解析https的目的。