HTTP
圖解HTTP:https://blog.csdn.net/zephyr999/article/details/80055420
HTTP1.0蟀给、HTTP1.1和HTTP2.0的區(qū)別:http://www.reibang.com/p/be29d679cbff
1.1 HTTP的發(fā)送與傳輸流程
1.2 各種協(xié)議與HTTP協(xié)議的關(guān)系
1.3 端口號
- HTTP協(xié)議請求的是80端口,HTTPS請求的是443端口
1.4 HTTP是不保存狀態(tài)的協(xié)議
- 一般只有使用POST方法的請求,有請求體跋理,而GET方法是沒有請求體的拍霜。
-
HTTP是不保存狀態(tài)的協(xié)議,HTTP 協(xié)議自身不具備保存之前發(fā)送過的請求或響應的功能薪介。
2. HTTP報文格式
HTTP報文又分為請求報文和響應報文祠饺,兩者的格式稍有區(qū)別。
2.1 請求報文
- 請求行:方法汁政、URI道偷、協(xié)議版本
- 首部字段:一些鍵值對
- 空行
- 請求體:一般POST方法的參數(shù)放在這里,GET方法一般沒有請求體
2.2 響應報文
- 狀態(tài)行:協(xié)議版本记劈、狀態(tài)碼勺鸦、原因短句
- 首部字段:響應的時間、類型等字段
- 空行
- 請求體:響應的內(nèi)容一般放這里
HTTPS
1. 你需要提前知道的概念
1.1 對稱加密和非對稱加密
1.2 公鑰和私鑰的作用
1.3 數(shù)字證書
CA 證書其實就是數(shù)字證書目木,是由 CA 機構(gòu)頒發(fā)的换途。至于 CA 機構(gòu)的權(quán)威性,那么是毋庸置疑的,所有人都是信任它的词顾。CA 證書內(nèi)一般會包含以下內(nèi)容:
- 證書的頒發(fā)機構(gòu)胀葱、版本
- 證書的使用者
- 證書的公鑰
- 證書的有效時間
- 證書的數(shù)字簽名 Hash 值和簽名 Hash 算法
CA 證書中的 Hash 值,其實是用證書的私鑰進行加密后的值(證書的私鑰不在 CA 證書中)懈息。然后客戶端得到證書后,利用證書中的公鑰去解密該 Hash 值摹恰,得到 Hash-a 辫继;然后再利用證書內(nèi)的簽名 Hash 算法去生成一個 Hash-b 。最后比較 Hash-a 和 Hash-b 這兩個的值俗慈。如果相等姑宽,那么證明了該證書是對的,服務端是可以被信任的闺阱;如果不相等炮车,那么就說明該證書是錯誤的,可能被篡改了馏颂,瀏覽器會給出相關(guān)提示示血,無法建立起 HTTPS 連接。除此之外救拉,還會校驗 CA 證書的有效時間和域名匹配等难审。
2. HTTPS請求的流程如下
2.1 對圖上的每一步進行解釋
- 客戶端向服務器發(fā)起HTTPS請求
- 服務器生成一對公鑰和私鑰,公鑰用來給客戶端加密亿絮,而自己則用私鑰解密告喊。公鑰需要放在證書中一起返回給客戶端麸拄,而私鑰是絕對保密的,不會告訴任何人黔姜。
- 服務器返回一個數(shù)字證書CA(CA中包括了一個公鑰和證書的其他信息)
- 首先拢切,客戶端要對數(shù)字證書進行驗證(具體如何驗證后面再講)。如果驗證沒通過秆吵,則發(fā)出警告:這個https請求有危險淮椰!如果通過了,客戶端會生成一個隨機字符串纳寂,后面稱這個隨機字符串為random key(注意:這個random key是用來進行接下來的對稱加密操作的主穗!和公鑰、私鑰的作用不同1形摺)忽媒,并通過客戶端數(shù)字證書中的公鑰進行一次加密。
- 將剛才加密過的random key再次傳給服務器腋粥。(因為是被公鑰加密過的晦雨,所以只有擁有私鑰的人才能解密!所以這里即使被人攔截到了隘冲,別人也不知道用的什么random keyD智啤)
- 接下來是服務器解密random key的過程,服務器先用私鑰解析出服務器傳的random key对嚼,獲得random key后夹抗,再把服務器請求的資源(可能是HTML界面,或者請求的數(shù)據(jù))用這個random key進行加密纵竖。注意:這次加密是對稱加密,由于服務器和客戶端都知道這個random key杏愤,所以他們可以用這個random key進行密文通信靡砌!
- 服務器將加密好的資源返回給客戶端
- 客戶端進行對稱解密,獲得資源
3. 為什么要對稱和非對稱兩套加密方法珊楼?
- 一句話總結(jié):為了安全和效率的綜合考量通殃。
- 如果客戶端直接使用公鑰進行加密,服務端用私鑰解密厕宗,也能實現(xiàn)通信画舌,而且不怕信息被攔截,但是非對稱加密需要大量計算已慢,會占用很多硬件資源曲聂,所以效率太低。
- 所以為了提升效率佑惠,非對稱加密朋腋,只用來傳輸接下來對稱加密所需要的秘鑰齐疙,再用秘鑰進行對稱加密,既保證了安全旭咽,有提高了效率
4. HTTPS真的安全嗎贞奋?
既然Https那么安全,那為什么用抓包工具還是可以看到里面的數(shù)據(jù)穷绵。這里需要對抓包過程的原理做一個簡單的介紹轿塔,抓包,其實就是中間人攻擊仲墨,在網(wǎng)絡請求過程中催训,抓包工具充當著客戶端/服務端的角色,當客戶端請求數(shù)據(jù)時宗收,抓包工具將請求進行攔截漫拭,然后構(gòu)造數(shù)據(jù)(冒充客戶端)向服務端發(fā)起請求,此時服務端會返回自己的公鑰證書混稽,然后抓包工具將服務端的公鑰證書替換成自己的公鑰證書采驻,隨后將數(shù)據(jù)返回可客戶端(此時充當服務端的角色)⌒傺客戶端拿到公鑰證書后礼旅,使用公鑰證書中的公鑰對Pre-master secret進行加密,并發(fā)送給服務端洽洁,發(fā)送過程中又被抓包工具攔截痘系,由于客戶端使用的公鑰其實就是抓包工具生成的證書公鑰,所以抓包工具只需要使用自己的私鑰進行解密即可拿到真實的Pre-master secret(因為抓包工具在之前的過程中已經(jīng)拿到了雙方的隨機碼饿自,所以到這一步抓包工具相當于已經(jīng)拿到了后續(xù)通信使用的密鑰)汰翠,隨后抓包工具使用從服務端接收到的公鑰證書中的公鑰對Pre-master secret進行加密,然后發(fā)送給服務端昭雌。隨后的通信過程雖然進行了加密复唤,但抓包工具已經(jīng)生成了密鑰(master secret),所以可以查看Https的通信內(nèi)容烛卧。一圖以蔽之:
從抓包的原理可以看出佛纫,對Https進行抓包,需要PC端和手機端同時安裝證書总放。
既然這么容易被抓包呈宇,那Https會不會顯得很雞肋?其實并不會局雄,能抓包甥啄,那是因為你信任抓包工具,手機上安裝了與之對應的證書哎榴,你要不安裝證書型豁,你抓一個試試僵蛛。而且安全這個課題,是在攻防中求發(fā)展迎变,沒有最安全充尉,只有更安全,所以將攻擊的成本提高了衣形,就間接達到了安全的目標驼侠。
4.1 如何對Https進行抓包
這里以Charles4.0為例,對Https進行抓包:
- 依次點擊菜單Help -> SSL Proxying -> Install Charles Root Certificate安裝PC證書谆吴;
- 依次點擊菜單Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Romote Browser, 此時會彈出一個框倒源,提示讓你去 chls.pro/ssl 去下載證書,下載完成后進行安裝即可
- 依次點擊菜單Proxy -> SSL Proxying Settings, 選中頁面中的Enable SSL Proxying, 然后點擊下面的add, 在彈出的框中的Host編輯框中填寫. (表示可對所有Https請求進行抓包)句狼,端口填寫443笋熬,點擊OK;
- 手機設置代理(你的電腦的IP地址腻菇,端口默認為8888)即可進行抓包胳螟;
鏈接:https://juejin.im/post/6844903602494898183
作者:Liberuman
來源:掘金
HTTP1.0和HTTP2.0的區(qū)別
總的來說區(qū)別就是:
- 新的二進制格式(Binary Format),HTTP1.x的解析是基于文本筹吐√撬剩基于文本協(xié)議的格式解析存在天然缺陷,文本的表現(xiàn)形式有多樣性丘薛,要做到健壯性考慮的場景必然很多嘉竟,二進制則不同,只認0和1的組合洋侨∩崛牛基于這種考慮HTTP2.0的協(xié)議解析決定采用二進制格式,實現(xiàn)方便且健壯凰兑。
- 多路復用(MultiPlexing)妥粟,即連接共享,即每一個request都是是用作連接共享機制的吏够。一個request對應一個id,這樣一個連接上可以有多個request滩报,每個連接的request可以隨機的混雜在一起锅知,接收方可以根據(jù)request的 id將request再歸屬到各自不同的服務端請求里面。
- header壓縮脓钾,如上文中所言售睹,對前面提到過HTTP1.x的header帶有大量信息,而且每次都要重復發(fā)送可训,HTTP2.0使用encoder來減少需要傳輸?shù)膆eader大小昌妹,通訊雙方各自cache一份header fields表捶枢,既避免了重復header的傳輸,又減小了需要傳輸?shù)拇笮 ?/li>
- 服務端推送(server push)飞崖,同SPDY一樣烂叔,HTTP2.0也具有server push功能。
1. 多路復用和二進制幀
多路復用允許單一的 HTTP/2 連接同時發(fā)起多重的請求-響應消息固歪。如下圖:
從這張圖可以看出蒜鸡,請求index.html頁面的時候,瀏覽器會去請求style.css和scripts.js的文件牢裳。左邊的圖是順序加載兩個個文件的逢防,右邊則是并行加載兩個文件。