多為搬運(yùn)匯總昆淡,加上自己的總結(jié),方便以后復(fù)習(xí)回顧盒件,參考資料在最下面蹬碧,感謝各位博主力作,希望以后自己也能寫出深入淺出有條理的文章炒刁,提升自己幫助他人恩沽。
首先是http的缺點(diǎn)
- 通信使用明文;第三方可以獲知通信內(nèi)容翔始。
- 不驗(yàn)證通信方的身份罗心;第三方可以冒充他人身份參與通信。
- 無(wú)法驗(yàn)證報(bào)文的完整性城瞎;第三方可以修改通信內(nèi)容渤闷。
因此確保安全通信的三個(gè)原則
- 數(shù)據(jù)內(nèi)容的加密
- 通訊雙方的身份校驗(yàn)
- 數(shù)據(jù)內(nèi)容的完整性
因此誕生了https:Https = Http + 加密 + 認(rèn)證 + 完整性保護(hù)
TCP/IP協(xié)議族中已經(jīng)提供了一個(gè)用于數(shù)據(jù)安全傳輸?shù)膮f(xié)議——SSL(Secure Socket Layer)安全套接層,位于應(yīng)用層與傳輸層之間脖镀。SSL 提供認(rèn)證和加密處理及摘要功能飒箭,最初是由瀏覽器開(kāi)發(fā)商網(wǎng)景通信公司率先倡導(dǎo)的,后來(lái)的TSL 是以 SSL 為原型開(kāi)發(fā)的協(xié)議蜒灰,有時(shí)會(huì)統(tǒng)一稱該協(xié)議為 SSL弦蹂,當(dāng)前主流的版本是 SSL3.0 和 TLS1.0。
故再簡(jiǎn)化為Https = Http + SSL
相對(duì)于TCP或HTTP協(xié)議强窖,SSL協(xié)議要復(fù)雜很多凸椿。由于它也是建立在TCP協(xié)議之上的,所以在使用SSL傳輸數(shù)據(jù)之前需要先進(jìn)行三次握手和服務(wù)器建立連接翅溺,具體的流程如圖所示:
SSL協(xié)議的握手過(guò)程
- 客戶端先給服務(wù)端發(fā)送一個(gè)消息脑漫,消息內(nèi)容包括:客戶端支持的加密方式,支持的壓縮方法未巫,SSL的版本號(hào)窿撬,客戶端生成的隨機(jī)數(shù)启昧,文本內(nèi)容“Hello”等叙凡;
- 服務(wù)端接收到消息后,也回發(fā)一個(gè)Hello密末,并攜帶從客戶端支持的加密方式中選擇的加密方式握爷,服務(wù)端生成的隨機(jī)數(shù)跛璧,服務(wù)端的SSL版本號(hào)等信息;
- 隨后服務(wù)器給客戶端發(fā)送一個(gè)Certificate報(bào)文新啼,報(bào)文中包含服務(wù)端的公鑰證書追城;
- 緊接著服務(wù)器給客戶端發(fā)送Server Hello Done, 表示最初的協(xié)商握手過(guò)程結(jié)束;
- 客戶端接收到服務(wù)端發(fā)送的握手結(jié)束的消息后燥撞,以Client Key Exchange作為回應(yīng)座柱,此報(bào)文中包含通信加密過(guò)程中使用的一種被稱為Pre-master secret的隨機(jī)密碼串,并使用第三步接收到的公鑰證書進(jìn)行了加密物舒;
- 接著客戶端發(fā)送Change Cipher Spec報(bào)文色洞,該報(bào)文告知服務(wù)端,此步驟之后的所有數(shù)據(jù)將使用第五步中生成的master secret進(jìn)行加密(master secret的生成過(guò)程看后面的介紹)冠胯;
- 隨后客戶端發(fā)送Finish報(bào)文火诸,此報(bào)文中包含連接至今所有報(bào)文的整體校驗(yàn)值,用于完整性驗(yàn)證荠察;
- 服務(wù)端接收到客戶端發(fā)送的Change Cliper Spec報(bào)文后置蜀,同樣以Change Cliper Spec報(bào)文作為回應(yīng);
- 接著服務(wù)端發(fā)送Finish報(bào)文給客戶端悉盆,表示服務(wù)端已正確解析客戶端發(fā)送的整體校驗(yàn)值盯荤,至此,SSL握手的過(guò)程結(jié)束焕盟。
- 隨后開(kāi)始使用HTTP協(xié)議傳輸使用master secret加密過(guò)的數(shù)據(jù)廷雅。
為了解決安全和效率問(wèn)題,SSL使用了對(duì)稱加密(加密和解密使用同樣的密鑰)和非對(duì)稱加密(公鑰加密京髓,私鑰解密)組合的方式:使用非對(duì)稱加密的方式傳輸對(duì)稱加密中生成密鑰的種子(pre master secret)【對(duì)應(yīng)上面的第五步】航缀,然后使用對(duì)稱加密的方式對(duì)通信數(shù)據(jù)進(jìn)行加密【對(duì)應(yīng)上面的第十步】,既保障了密鑰的安全性堰怨,也提高了加密速度芥玉。
歸納ssl五次握手,或四次(將4备图、5合并)
- 客戶端請(qǐng)求建立SSL鏈接灿巧,并向服務(wù)端發(fā)送協(xié)議版本號(hào)、一個(gè)隨機(jī)數(shù)–Client random和客戶端支持的加密方法揽涮,比如RSA公鑰加密抠藕,此時(shí)是明文傳輸。
- 服務(wù)端回復(fù)一種客戶端支持的加密方法蒋困、一個(gè)隨機(jī)數(shù)–Server random盾似、授信的服務(wù)器證書和非對(duì)稱加密的公鑰。
- 客戶端收到服務(wù)端的回復(fù)后雪标,確認(rèn)數(shù)字證書有效零院,然后生成新的隨機(jī)數(shù)–Premaster secret 通過(guò)服務(wù)端下發(fā)的公鑰及加密方法進(jìn)行加密溉跃,發(fā)送給服務(wù)器。
- 服務(wù)端收到客戶端的回復(fù)告抄,利用自己的私鑰解密獲得Premaster secret撰茎,
- 服務(wù)端利用Client random、Server random和Premaster secret通過(guò)一定的算法生成HTTP鏈接數(shù)據(jù)傳輸?shù)膶?duì)稱加密key – session key(包含于上面提到的master secret中)打洼,用來(lái)加密接下來(lái)的整個(gè)對(duì)話過(guò)程龄糊。
握手階段有三點(diǎn)需要注意。
- 生成對(duì)話密鑰一共需要三個(gè)隨機(jī)數(shù)募疮。
- 握手之后的對(duì)話使用"對(duì)話密鑰"加密(對(duì)稱加密)绎签,服務(wù)器的公鑰和私鑰只用于加密和解密"對(duì)話密鑰"(非對(duì)稱加密),無(wú)其他作用
- 服務(wù)器公鑰放在服務(wù)器的數(shù)字證書之中酝锅。
Master secret與session key
由于服務(wù)端和客戶端都有一份相同的PreMaster secret和隨機(jī)數(shù)诡必,這個(gè)隨機(jī)數(shù)將作為后面產(chǎn)生Master secret的種子,結(jié)合PreMaster secret搔扁,客戶端和服務(wù)端將計(jì)算出同樣的Master secret爸舒。
Master secret是有系列的hash值組成的,它將作為數(shù)據(jù)加解密相關(guān)的secret的Key Material稿蹲。Master secret最終解析出來(lái)的數(shù)據(jù)如下:
其中扭勉,write MAC key,就是session secret或者說(shuō)是session key苛聘。
Client write MAC key是客戶端發(fā)數(shù)據(jù)的session secret涂炎,Server write MAC secret是服務(wù)端發(fā)送數(shù)據(jù)的session key。MAC(Message Authentication Code)设哗,是一個(gè)數(shù)字簽名唱捣,用來(lái)驗(yàn)證數(shù)據(jù)的完整性,可以檢測(cè)到數(shù)據(jù)是否被串改网梢。
證書
證書由值得信任的第三方機(jī)構(gòu)頒發(fā)震缭,用以證明服務(wù)器和客戶端是實(shí)際存在的。
現(xiàn)在主要還是客戶端去檢驗(yàn)服務(wù)端的證書战虏,客戶端的證書還不夠普及拣宰,如銀行的網(wǎng)上銀行就需要客戶端證書。
HTTPS 比 HTTP 要慢 2 到 100 倍
SSL 的慢分兩種烦感。一種是指通信慢巡社。另一種是指由于大量消耗CPU 及內(nèi)存等資源,導(dǎo)致處理速度變慢手趣。
和使用 HTTP 相比晌该,網(wǎng)絡(luò)負(fù)載可能會(huì)變慢 2 到 100 倍。除去和TCP 連接、發(fā)送 HTTP 請(qǐng)求 ? 響應(yīng)以外气笙,還必須進(jìn)行 SSL 通信,
因此整體上處理通信量不可避免會(huì)增加怯晕。另一點(diǎn)是 SSL 必須進(jìn)行加密處理潜圃。在服務(wù)器和客戶端都需要進(jìn)行加密和解密的運(yùn)算處理。因此從結(jié)果上講舟茶,比起 HTTP 會(huì)更多地消耗服務(wù)器和客戶端的硬件資源谭期,導(dǎo)致負(fù)載增強(qiáng)。
針對(duì)速度變慢這一問(wèn)題吧凉,并沒(méi)有根本性的解決方案隧出,我們會(huì)使用SSL 加速器這種(專用服務(wù)器)硬件來(lái)改善該問(wèn)題。該硬件為SSL 通信專用硬件阀捅,相對(duì)軟件來(lái)講胀瞪,能夠提高數(shù)倍 SSL 的計(jì)算速度。僅在 SSL 處理時(shí)發(fā)揮 SSL 加速器的功效饲鄙,以分擔(dān)負(fù)載凄诞。
補(bǔ)充
從URL輸入到頁(yè)面展現(xiàn)到底發(fā)生什么?
- DNS 解析:將域名解析成 IP 地址
- TCP 連接:TCP 三次握手
- 發(fā)送 HTTP 請(qǐng)求
- 服務(wù)器處理請(qǐng)求并返回 HTTP 報(bào)文
- 瀏覽器解析渲染頁(yè)面
- 斷開(kāi)連接:TCP 四次揮手
四次揮手
參考資料
Https詳解
圖解SSL/TLS協(xié)議-阮一峰
圖解HTTP(書)
從URL輸入到頁(yè)面展現(xiàn)到底發(fā)生什么忍级?