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