HTTP和HTTPS协议及工作原理分析
?HTTP協(xié)議概念
HTTP協(xié)議(HyperText Transfer Protocol,超文本傳輸協(xié)議,屬于應(yīng)用層)是用于從服務(wù)器傳輸超內(nèi)容到本地瀏覽器的傳送協(xié)議。是一個(gè)無(wú)狀態(tài)的協(xié)議
想了解http,就需要了解TCP,IP協(xié)議。因?yàn)閔ttp是基于TCP,IP層上面的。如下圖所示:
整張圖應(yīng)該從下邊向上看,假設(shè)別人想發(fā)一條信息給我的電腦。首先是通過(guò)網(wǎng)絡(luò)把信息傳導(dǎo)到的電腦,但不能說(shuō)我的電腦對(duì)于所有的信息都接受,我會(huì)判斷信息,之后在處理信息,這些就是七層模型做的事情。一步一步分開(kāi)來(lái)看 ,并用打電話(huà)這一創(chuàng)建的例子來(lái)對(duì)應(yīng):
到這里為止,其實(shí)信息還沒(méi)有傳遞到我們的電腦,可以理解為信息在路由網(wǎng)絡(luò)間傳遞。
總結(jié)起來(lái)就是:
-
信息發(fā)出(www)
-
看到信息
對(duì)于HTTP網(wǎng)絡(luò)應(yīng)用,我們?cè)诰W(wǎng)絡(luò)層用的是IP,在傳輸層用的是TCP。
IP: internet protocal。顧名思義,網(wǎng)絡(luò)協(xié)議。他能確保計(jì)算機(jī)之間在網(wǎng)絡(luò)上互相通信,但是他不檢查消息是否以發(fā)送次序到達(dá)而沒(méi)有損壞,因此,我們需要上一層來(lái)檢驗(yàn)消息。于是有了TCP層
TCP: 保證信息正確次序,內(nèi)容不變。同時(shí)引入端口分發(fā)給不同的服務(wù)。同時(shí)分割數(shù)據(jù)為更小的ip包,到達(dá)時(shí)重組。
HTTP: 當(dāng)信息解讀好,我們傳給HTTP層,即為應(yīng)用層。超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。
以上是對(duì)支撐HTTP的網(wǎng)絡(luò)七層的概括,我們需要理解為什么要在http層下面有那么多層,每一層的目的是什么。
明白了這些之后,問(wèn)題來(lái)了,這七層是怎么知道自己應(yīng)該怎么解讀數(shù)據(jù),而不是說(shuō)TCP層解讀HTTP層。這里面就是網(wǎng)絡(luò)數(shù)據(jù)的封裝和傳遞了:
從這個(gè)圖中,我們可以看到每一層的數(shù)據(jù)都會(huì)被一個(gè)這層的頭信息包裹。
之后我們?cè)诮邮盏叫畔r(shí)再一層一層讀取信息
講完http,我們會(huì)發(fā)現(xiàn),我們傳遞的信息在網(wǎng)絡(luò)上經(jīng)過(guò)那么多物理層的傳輸,保不準(zhǔn)會(huì)被別人截獲,而我們卻一點(diǎn)也不知道。于是我們想到要加密我們傳輸?shù)臄?shù)據(jù)。因?yàn)橹挥衕ttp層信息是我們要的,所以在這一層下面加入一層來(lái)加密信息。這一層就是SSL層,同時(shí)我們?nèi)绻雮鹘ossl層,我們用端口443.
ssl層簡(jiǎn)稱(chēng)安全套階層,主要就是加密解密。
一開(kāi)始我們會(huì)說(shuō),我們就讓服務(wù)器給我們一個(gè)公鑰,每次用他來(lái)解密不就行了。但是這種辦法不可以,因?yàn)閯e人同樣可以截獲你的公鑰,畢竟公鑰也是在網(wǎng)絡(luò)上傳遞的。
于是我們就要想一種辦法,讓我們的公鑰也被加密,并且這個(gè)加密方式是在服務(wù)器或者我們電腦上進(jìn)行的,這樣才安全
HTTPS協(xié)議
HTTPS(全稱(chēng):Hypertext Transfer Protocol over Secure Socket Layer),簡(jiǎn)單來(lái)講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎(chǔ)是SSL。其所用的端口號(hào)是443。
SSL:(Secure Socket Layer,安全套接字層),通過(guò)使用證書(shū)認(rèn)證來(lái)確保客戶(hù)端和網(wǎng)站服務(wù)器之間的通信數(shù)據(jù)是加密安全的。SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間。
TLS:TLS(Transport Layer Security,傳輸層安全協(xié)議),用于兩個(gè)應(yīng)用程序之間提供保密性和數(shù)據(jù)完整性。SSL和TLS的主要區(qū)別?
TLS的主要目標(biāo)是使SSL更安全,并使協(xié)議的規(guī)范更精確和完善。
說(shuō)到HTTPS肯定少不了加解密算法,我們來(lái)了解下相關(guān)內(nèi)容
有兩種基本的加解密算法類(lèi)型:
? 1、對(duì)稱(chēng)加密(symmetrcic encryption):密鑰只有一個(gè),加密解密為同一個(gè)密碼,且加解密速度快,典型的對(duì)稱(chēng)加密算法有DES、AES,RC5,3DES等;例如我們創(chuàng)建一個(gè)帶密碼(口令)的加密壓縮包。當(dāng)你下次要把這個(gè)壓縮文件解開(kāi)的時(shí)候,你需要輸入【同樣的】密碼。在這個(gè)例子中,密碼/口令就如同剛才說(shuō)的“密鑰”。
? ?對(duì)稱(chēng)加密主要問(wèn)題是共享秘鑰,除你的計(jì)算機(jī)(客戶(hù)端)知道另外一臺(tái)計(jì)算機(jī)(服務(wù)器)的私鑰秘鑰,否則無(wú)法對(duì)通信流進(jìn)行加密解密。解決這個(gè)問(wèn)題的方案是非對(duì)稱(chēng)加密。
? ?2、非對(duì)稱(chēng)加密:使用兩個(gè)秘鑰:公共秘鑰和私有秘鑰。私有秘鑰由一方密碼保存(一般是服務(wù)器保存),另一方任何人都可以獲得公共秘鑰。一般來(lái)說(shuō)指:加密時(shí)使用公鑰,解密時(shí)使用私鑰。
? ?這種密鑰成對(duì)出現(xiàn)(且根據(jù)公鑰無(wú)法推知私鑰,根據(jù)私鑰也無(wú)法推知公鑰),加密解密使用不同密鑰(公鑰加密需要私鑰解密,私鑰加密需要公鑰解密),相對(duì)對(duì)稱(chēng)加密速度較慢,典型的非對(duì)稱(chēng)加密算法有RSA、DSA等。
如圖:
?
總結(jié)及答疑
① 證書(shū)驗(yàn)證階段
② 數(shù)據(jù)傳輸階段
為什么數(shù)據(jù)傳輸是用對(duì)稱(chēng)加密?
非對(duì)稱(chēng)加密的加解密效率是非常低的,而在https 的應(yīng)用場(chǎng)景中通常客戶(hù)端端與服務(wù)端之間存在大量的ajax交互,非對(duì)稱(chēng)加密的效率是無(wú)法接受的;
另外,在 HTTPS 的場(chǎng)景中只有服務(wù)端保存了私鑰,一對(duì)公私鑰只能實(shí)現(xiàn)單向的加解密,所以 HTTPS 中內(nèi)容傳輸加密采取的是對(duì)稱(chēng)加密,而不是非對(duì)稱(chēng)加密。
為什么需要 CA 認(rèn)證機(jī)構(gòu)頒發(fā)證書(shū)?
HTTP 協(xié)議被認(rèn)為不安全是因?yàn)閭鬏斶^(guò)程容易被監(jiān)聽(tīng)、偽造服務(wù)器,而 HTTPS 協(xié)議主要解決的便是網(wǎng)絡(luò)傳輸?shù)陌踩詥?wèn)題。
首先我們假設(shè)不存在認(rèn)證機(jī)構(gòu),任何人都可以制作證書(shū),這帶來(lái)的安全風(fēng)險(xiǎn)便是經(jīng)典的“中間人攻擊”問(wèn)題。
“中間人攻擊”的具體過(guò)程如下:
過(guò)程原理:
由于缺少對(duì)證書(shū)的驗(yàn)證,所以客戶(hù)端雖然發(fā)起的是 HTTPS 請(qǐng)求,但客戶(hù)端完全不知道自己的網(wǎng)絡(luò)已被攔截,傳輸內(nèi)容被中間人全部竊取。
中間人攻擊:總結(jié)起來(lái)一句話(huà)就是客戶(hù)端不知道CA證書(shū)是不是合法的,誰(shuí)都可以冒充合法的服務(wù)器,從而獲取到真實(shí)的客戶(hù)端生成的內(nèi)容及隨機(jī)數(shù)相關(guān)的值,然后中間人再利用獲取到這些值去和真實(shí)的服務(wù)器進(jìn)行https請(qǐng)求(這個(gè)過(guò)程是合法的,因?yàn)橹虚g人這個(gè)服務(wù)器拿的真實(shí)的客戶(hù)端數(shù)據(jù),模仿真實(shí)的客戶(hù)端請(qǐng)求)。
瀏覽器如何驗(yàn)證證書(shū)的合法性?
只有認(rèn)證機(jī)構(gòu)可以生成證書(shū)嗎?
從技術(shù)上角度來(lái)看誰(shuí)都可以生成證書(shū),只要有證書(shū)就可以完成網(wǎng)站的 HTTPS 傳輸。但是瀏覽器會(huì)提示風(fēng)險(xiǎn)。
用了 HTTPS 會(huì)被抓包嗎?
會(huì),但是得是用戶(hù)授權(quán)了同意了訪(fǎng)問(wèn)該網(wǎng)站,只要是用戶(hù)主動(dòng)授權(quán)訪(fǎng)問(wèn)風(fēng)險(xiǎn)網(wǎng)站,都可能造成數(shù)據(jù)被中間人抓包
總結(jié)
以上是生活随笔為你收集整理的HTTP和HTTPS协议及工作原理分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA实现网页版斗地主_Java实现斗
- 下一篇: rocketmq 初探(四)