簡述
最近在看網(wǎng)絡(luò)框架時驰吓,理解了下網(wǎng)絡(luò)框架中使用到的安全技術(shù)。在蘋果將要強(qiáng)制開發(fā)者使用HTTPS的環(huán)境下,如何提高HTTPS的安全性將成為重點(diǎn)辆布。通過一段時間的學(xué)習(xí),閱讀了一些文章茶鉴,融合了自己對SSL Pinning的理解锋玲,在此做個總結(jié),也為自己做個備份涵叮,如有不正確或者不恰當(dāng)?shù)牡胤綒g迎指正惭蹂!
使用背景
在開發(fā)手機(jī)應(yīng)用時,如何正確的使用HTTPS來提高網(wǎng)絡(luò)傳輸?shù)陌踩允怯葹橹匾母盍浮TTPS協(xié)議本使用了SSL?加密傳輸盾碗,相比HTTP但依然存在極大的安全隱患----中間人攻擊。SSL解決了內(nèi)容的加密的問題穆刻,但是SSL過程中是依靠證書進(jìn)行驗(yàn)證的置尔,這就需要保證證書絕對的安全。先立一個小目標(biāo)(偽造證書)氢伟,萬一實(shí)現(xiàn)了呢榜轿?在立一個小目標(biāo)(偽造服務(wù)器),萬一實(shí)現(xiàn)了呢朵锣?事實(shí)證明目標(biāo)是可以實(shí)現(xiàn)的(SSL系統(tǒng)遭入侵發(fā)布虛假密鑰 微軟谷歌受影響 )谬盐。SSL Pinning技術(shù)就是基于SSL基礎(chǔ)上在添加一個本地證書,用來再次驗(yàn)證诚些!
中間人攻擊
中間人攻擊(英語:Man-in-the-middle attack飞傀,縮寫:MITM),是一種由來已久的攻擊手段诬烹。 攻擊者通過特殊手段進(jìn)行攔截正常的網(wǎng)絡(luò)通信數(shù)據(jù)砸烦,在通信雙方不知情的情況下對數(shù)據(jù)進(jìn)行篡改。
具體中間人攻擊簡介請參考維基百科----中間人攻擊?
中間人攻擊流程
中間人攻擊一般是發(fā)生在SSL會話的初始階段绞吁,一旦會話初始完成幢痘,攻擊者是很難通過中間人攻擊進(jìn)行攻擊的。不了解SSL加密原理的請參考這篇文章 家破。也就是說中間人攻擊只會發(fā)生在會話的初始階段颜说,初始化階段是通過非對稱加密來協(xié)商對稱加密的密鑰购岗,通信階段是通過對稱加密來進(jìn)行通信加密的,這種加密方式又稱為混合加密门粪。
在會話的初始階段喊积,客戶端第一次發(fā)送請求時,通過明文進(jìn)行發(fā)送的玄妈,為了防止信息泄露乾吻,服務(wù)端在返回時則返回一個公鑰和證書給客戶端〈虢客戶端驗(yàn)證證書是否是認(rèn)證機(jī)構(gòu)頒發(fā)溶弟,證書是否在有效期內(nèi)女淑,若沒問題則進(jìn)行下一次請求瞭郑。在下一次客戶端發(fā)送請求的時,通過公鑰對核心數(shù)據(jù)進(jìn)行加密鸭你,服務(wù)端在接收到數(shù)據(jù)時屈张,獲取對稱加密的密鑰。此后請求就是通過對稱加密的密鑰進(jìn)行加密袱巨。
如果不進(jìn)行證書的驗(yàn)證阁谆,當(dāng)攻擊者進(jìn)行攻擊時,通過攔截服務(wù)器返回的數(shù)據(jù)愉老,將公鑰替換為自己的公鑰(偽公鑰)返回給客戶端场绿,在客戶端下一次請求時,攻擊者就可以通過自己的私鑰(偽私鑰)將數(shù)據(jù)獲取并替換為自己請求數(shù)據(jù)嫉入,通過獲取到的公鑰請求服務(wù)器焰盗,如此一來就可以獲取到通信中的對話密鑰,從而進(jìn)行一系列的操作咒林。
為了解決這個問題熬拒,服務(wù)器在返回公鑰時將綁定證書(數(shù)字簽名)返回,若客戶端驗(yàn)證證書時發(fā)現(xiàn)證書有誤則中斷會話垫竞,這樣就避免了攻擊者進(jìn)行攔截澎粟。但是怎么確定證書是認(rèn)證機(jī)構(gòu)頒發(fā),這時就需要一個機(jī)構(gòu)對服務(wù)器進(jìn)行認(rèn)證欢瞪,這個機(jī)構(gòu)就是CA活烙,而這個認(rèn)證之后的證書就是服務(wù)器返回的證書。但是如何確定這個機(jī)構(gòu)就是一個值得相信的機(jī)構(gòu)遣鼓,這時還需要一個最權(quán)威的機(jī)構(gòu)對其他機(jī)構(gòu)進(jìn)行認(rèn)證啸盏,而這個最權(quán)威的機(jī)構(gòu)就是根CA,對其他機(jī)構(gòu)認(rèn)證的證書就是根證書譬正。以上是信任體系宫补,通過這樣的體系就有效的防止了攻擊者進(jìn)行證書偽造檬姥,如果攻擊者是其中的某個機(jī)構(gòu)認(rèn)證過的,就會再次發(fā)生數(shù)據(jù)攔截偽造的情況粉怕。(有點(diǎn)繞健民,嘿嘿...)
基于上面的攻擊方式,客戶端和服務(wù)端需要在本地約定好一個本地證書贫贝,獲取到數(shù)據(jù)之后在基于上面的驗(yàn)證基礎(chǔ)上再驗(yàn)證本地證書是否相同秉犹,這樣就有效的避免了中間人攻擊,而這種安全技術(shù)就是SSL Pinning技術(shù)稚晚。
參考文章