一、Http協議的優點與缺點
前言:
什么是HTTP?
超文本傳輸協議,是一個基於請求與響應,無狀態的,應用層的協議,常基於TCP/IP協議傳輸數據,互聯網上應用最為廣泛的一種網絡協議,所有的WWW文件都必須遵守這個標准。設計HTTP的初衷是為了提供一種發布和接收HTML頁面的方法。
HTTP發展歷史?
HTTP/1.1與HTTP/2對比?
1、性能優勢:使用HTTP/1.1和HTTP/2同時請求服務器資源,觀察請求的時間,明顯看出HTTP/2性能占優勢。
2、多路復用:通過單一的HTTP/2連接請求發起多重的請求-響應消息,多個請求stream共享一個TCP連接,實現多留並行而不是依賴建立多個TCP連接。
1.1、HTTP協議的優點
1.1.1:效率高
限制每個連接只有一個請求的無連接狀態,在服務器處理完客戶的請求,並收到客戶的反應,即斷開,通過這種方式可以節省傳輸時間。
1.1.2: 簡單快速
當服務器客戶端請求服務時,只需傳送請求方法和路徑。請求方法常用的GET,HEAD,POST。每種方法規定了客戶端與服務器聯系的是不同的類型。因為簡單的 HTTP 協議,通信速度很快。
1.1.3: 靈活
HTTP 允許任何類型的數據對象的傳輸,在數據傳輸時對被傳輸的內容類型進行標記。
1.1.4:無狀態
HTTP 協議是無狀態的協議,沒有協議的事務處理和存儲能力。【協議對客戶端沒有狀態存儲,對事物處理沒有“記憶”能力,比如訪問一個網站需要反復進行登錄操作】
1.2、HTTP協議的缺點
1.2.1:數據明文傳輸
有被竊聽的風險,Http通信使用明文,傳輸過程中沒有任何的保證措施,可能會被竊聽。
1.2.2:數據傳輸期間無身份校驗
在傳輸過程中,不驗證通信方的身份,這中間就有可能被遭遇偽裝。
1.2.3:數據傳輸不校驗報文完整性
HTTP只是對報文進行了解析,並沒有對其進行完整的校驗,所以無法驗證報文的完整性,可能被遭篡改
1.24:無連接
HTTP/1.1版本之前,由於無狀態特點,導致每次請求需要通過TCP三次握手四次揮手,和服務器重新建立連接。比如某個客戶機在短時間多次請求同一個資源,服務器並不能區別是否已經響應過用戶的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
1.3、HTTP報文格式
二、Https協議的特點
2.1、HTTPS簡介
HTTPS並不是一個嶄新的協議,而是在HTTP的基礎上發展而來,意為HTTP Secure。相當於是HTTP的升級版。
它主要是為了解決HTTP協議安全性不足的問題而誕生的。在使用HTTPS之后,訪問瀏覽器的時候前綴由HTTP變為HTTPS。現在我們看到網站都采用HTTPS的協議比比皆是,比如:如下都是https的網站:
2.2、HTTP+加密+認證+完整性保護 = HTTPS
HTTPS的通信端口由SSL和TSL代替了,它是一種應用層協議。一般的情況下HTTP直接和TCP進行通信,當使用了SSL之后,就會變成先和SSL通信,SSL再和Tcp進行通信。
原理圖如下:
當采用了SSL協議之后,Http協議就具備了加密、證書、完整性保護三大功能,SSL是獨立於HTTP存在的,它是現存的廣泛使用的網絡安全技術。
三、HTTPS協議采用的加密技術
3.1、SSL采用的加密技術
3.1.1:對稱密鑰加密
SSL采用的加密技術叫做“共享密鑰加密”,也叫作“對稱密鑰加密”。
這種加密方法是這樣的:比如客戶端向服務器發送一條信息,首先客戶端會采用已知的算法對信息進行加密,比如MD5或者Base64加密;
然后接收端對加密的信息進行解密的時候需要用到密鑰,中間會傳遞密鑰,(加密和解密的密鑰是同一個),密鑰在傳輸中間是被加密的。
這種方式看起來安全,但是仍有潛在的危險,一旦被竊聽,或者信息被挾持,就有可能破解密鑰,而破解其中的信息。因此“共享密鑰加密”這種方式存在安全隱患:
3.3.2:非對稱密鑰加密
非對稱加密方式使用的時候有兩把鎖,一把叫做“私有密鑰”,一把是“公開密鑰”。
使用非對稱加密的加密方式的時候,服務器首先告訴客戶端按照自己給定的公開密鑰進行加密處理,客戶端按照公開密鑰加密以后,服務器接收到客戶端傳輸過來的信息再通過自己的私有密鑰進行解密。
這樣做的好處就是解密的鑰匙根本就不會進行傳輸,因此也就避免了被挾持的風險。就算公開密鑰被竊聽者拿到了,它也很難進行解密。
但是因為解密過程是對離散對數求值,這可不是輕而易舉就能做到的事。以下是非對稱加密的原理圖:
四、HTTPS的安全通信機制
4.1、非稱加密方式的缺點
公開密鑰加密固然比共享密鑰加密的方式提升了一個檔次,但是它也存在兩個問題:
第一個是:如何保證接收端向發送端發出公開秘鑰的時候,發送端確保收到的是預先要發送的,而不會被挾持或更改。但是只要是發送密鑰,就有可能有被挾持的風險。
第二個是:非對稱加密的方式效率比較低,它處理起來更為復雜,通信過程中使用就有一定的效率問題而影響通信速度。
4.2、HTTPS采用混合機制的加密方式
HTTPS則綜合了公開密鑰加密和共享密鑰加密的兩種方式,充分利用兩者的優勢;
在最初的連接的時候使用非對稱密鑰的加密方式保證連接的安全性;【服務端與客戶端剛建立有效連接的時候,依舊采用公鑰加密,私鑰解密的非對稱加密方式進行數據傳輸】
之后的穩定的通訊(服務端與客戶端之間的數據傳輸)采用對稱加密的方式。但是前提條件穩定的通訊是指確保客戶端和服務端交換的密鑰是安全的。
4.3、HTTPS的證書機制
在4.1中我們講了非對稱加密的缺點,其中第一個就是在非對稱加密方式中公鑰很可能存在被挾持的情況,無法保證客戶端收到的公開密鑰就是服務器發行的公開密鑰。
此時就引出了公開密鑰證書機制。數字證書認證機構是客戶端與服務器都可信賴的第三方機構。
證書的具體傳播過程如下:
1:服務器的開發者攜帶公開密鑰,向數字證書認證機構提出公開密鑰的申請。
數字證書認證機構在認清申請者的身份,審核通過以后,會對開發者申請的公開密鑰做數字簽名。
然后分配這個已簽名的公開密鑰,並將密鑰放在證書里面,綁定在一
2:服務器將這份數字證書發送給客戶端,因為客戶端也認可證書機構,所以客戶端可以通過數字證書中的數字簽名來驗證公鑰的真偽,來確保服務器傳過來的公開密鑰是真實的。
一般情況下,證書的數字簽名是很難被偽造的,這取決於認證機構的公信力。
一旦確認信息無誤之后,客戶端就會通過公鑰對報文進行加密發送,服務器接收到以后用自己的私鑰進行解密。
4.4、關於客戶端證書
客戶端證書是進行客戶端認證的,證明服務器正在通信的客戶端是安全的。【雙向認證】(當客戶端向服務端發送了被公鑰加密后的數據,同時也攜帶着客戶端證書,然后服務器根據客戶端證書驗證客戶端的存在)
但是使用客戶端證書使用存在以下幾個問題:
1:使用客戶端證書,客戶得自己安裝證書,客戶端證書是需要進行付費購買的,且每張證書對應到用戶意味着需要支付用戶數量對等的費用,這叫給用戶帶來了間接的問題。
2:客戶端證書存在另一個問題是,客戶端證書只能證明客戶端的存在,而不能證明用戶本人的真實有效。
五、為什么還有很多網站不使用HTTPS?
HTTPS既然如此安全可靠,為什么還有很多WEB網站不使用Https的協議?這其中的原因有以下幾點:
5.1:加密通信會消耗一定的cpu和服務器資源,如果每次通信都加密,然后對應的服務器在收到消息后解密,無疑會消耗更多的資源。
5.2:如果所有的信息都采用HTTPS加密,這無疑是一種浪費。非敏感信息就算被竊取了,也無傷大雅。可以在其傳輸敏感信息的時候,采用HTTPS協議進行加密。
5.3:購買證書的開銷也是一筆很大的費用。向認證機構購買證書,證書價格會根據不同的認證機構略有不同,而一般的授權需要折合人民幣600多元。
5.4:HTTPS協議的加密范圍也比較有限,在黑客攻擊、拒絕服務攻擊、服務器劫持等方面幾乎起不到什么作用。
5.5:SSL證書的信用鏈體系並不安全,特別是在某些國家可以控制CA根證書的情況下,中間人攻擊一樣可行。【中間人攻擊(MITM攻擊)是指,黑客攔截並篡改網絡中的通信數據。又分為被動MITM和主動MITM,被動MITM只竊取通信數據而不修改,而主動MITM不但能竊取數據,還會篡改通信數據。最常見的中間人攻擊常常發生在公共wifi或者公共路由上。】
成本考慮:
- SSL證書需要購買申請,功能越強大的證書費用越高
- SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗(SSL有擴展可以部分解決這個問題,但是比較麻煩,而且要求瀏覽器、操作系統支持,Windows XP就不支持這個擴展,考慮到XP的裝機量,這個特性幾乎沒用)。
- 根據ACM CoNEXT數據顯示,使用HTTPS協議會使頁面的加載時間延長近50%,增加10%到20%的耗電。
- HTTPS連接緩存不如HTTP高效,流量成本高。
- HTTPS連接服務器端資源占用高很多,支持訪客多的網站需要投入更大的成本。
- HTTPS協議握手階段比較費時,對網站的響應速度有影響,影響用戶體驗。比較好的方式是采用分而治之,類似12306網站的主頁使用HTTP協議,有關於用戶信息等方面使用HTTPS。
針對5.2舉例:
類似12306網站的主頁使用HTTP協議,有關於用戶信息等方面使用HTTPS。
瀏覽器和服務器在基於HTTPS進行請求連接到數據傳輸過程中,用到哪些技術?
1、對稱加密算法
用於對真正傳輸的數據進行加密。【對稱加密算法代表通信雙方使用同一套密鑰對傳輸數據進行加密】
2、非對稱加密
用於在握手過程中加密生成的密碼。【公鑰加密】
非對稱加密算法會生成公鑰和私鑰,公鑰只能用於加密數據,因此可以隨意傳輸;而網站的私鑰用於對數據進行解密,所以網站都會非常小心地保管自己的私鑰,防止泄漏。
3、散列算法
用於驗證數據的完整性。
4、數字證書
數據證書其實就是一個小的計算機文件,其作用類似於我們的身份證、護照,用於證明身份,在SSL中,使用數字證書來證明自己的身份。
客戶端有公鑰【此時的公鑰是向服務器請求得到】,服務器有私鑰,客戶端用公鑰對<對稱密鑰>進行加密【對稱密鑰存放於客戶端(因為客戶端與服務端通信,當客戶端向服務端發起請求的時候,會帶着客戶端自己的加密規則<對稱密鑰>)】,將加密后的對稱密鑰發送給服務器,服務器用私鑰對其進行解密,所以客戶端和服務器可用對稱密鑰來進行通信。
非對稱加密方式【即公鑰和私鑰】是用來加密和解密<對稱密鑰>;而對稱加密方式【對稱密鑰】是用來加密數據;分別利用了兩者的優點。