Http和Https屬於計算機網絡範疇,但作為開發人員,不管是後臺開發或是前臺開發,都很有必要掌握它們。
在學習Http和Https的過程中,主要是參考了 阮壹峰老師的博客 ,講的很全面,並且通俗易懂,有興趣的同學可以去學習學習。
這篇文章主要是按照自己的思路來講解對Http和Https的理解。文章將會從以下幾個方面介紹。
目錄樹( 暫時還不知道編輯器怎麽通過目錄樹進行頁面內跳轉,哪位同學知道希望不吝告知 ):
從目錄結構可以看出,每個標題展開來說都是壹個很大的主題。但本文旨在讓各位同學對Http和Https相關知識有壹個全面的認知,不會太過深入探討各個主題,有興趣的同學可以進行針對性研究。
網絡結構有兩種主流的分層方式: OSI七層模型 和 TCP/IP四層模型 。
OSI是指Open System Interconnect,意為開放式系統互聯。
TCP/IP是指傳輸控制協議/網間協議,是目前世界上應用最廣的協議。
Http是基於TCP/IP協議的應用程序協議,不包括數據包的傳輸,主要規定了客戶端和服務器的通信格式,默認使用80端口。
Request格式:
Response格式:
說明壹下請求頭和響應頭的部分字段:
Http和Https協議請求時都會通過Tcp三次握手建立Tcp連接。那麽,三次握手是指什麽呢?
那麽,為什麽壹定要三次握手呢,壹次可以嗎?兩次可以嗎?帶著這些問題,我們來分析壹下為什麽必須是三次握手。
通過三次握手, A和B都能確認自己和對方的收發信能力,相當於建立了互相的信任 ,就可以開始通信了。
下面,我們介紹壹下三次握手具體發送的內容,用壹張圖描述如下:
首先,介紹壹下幾個概念:
知道了上面幾個概念後,看壹下三次握手的具體流程:
從圖中可以看出,建立連接經歷了 三次握手 ,當數據傳輸完畢,需要斷開連接,而斷開連接經歷了 四次揮手 :
下面是Tcp報文段首部格式圖,對於理解Tcp協議很重要:
Https協議是以安全為目標的Http通道,簡單來說就是Http的安全版。主要是在Http下加入SSL層(現在主流的是SLL/TLS),SSL是Https協議的安全基礎。Https默認端口號為443。
前面介紹了Http協議,各位同學能說出Http存在的風險嗎?
SSL/TLS協議就是為了解決這些風險而設計,希望達到:
下面主要介紹SSL/TLS協議。
SSL/TLS協議基本思路是采用公鑰加密法(最有名的是RSA加密算法)。大概流程是, 客戶端向服務器索要公鑰,然後用公鑰加密信息,服務器收到密文,用自己的私鑰解密 。
為了防止公鑰被篡改,把公鑰放在數字證書中,證書可信則公鑰可信。公鑰加密計算量很大,為了提高效率, 服務端和客戶端都生成對話秘鑰,用它加密信息,而對話秘鑰是對稱加密,速度非常快。而公鑰用來機密對話秘鑰 。
下面用壹張圖表示SSL加密傳輸過程:
詳細介紹壹下圖中過程:
上面提到了,Https協議中需要使用到SSL證書。
SSL證書是壹個二進制文件,裏面包含經過認證的網站公鑰和壹些元數據,需要從經銷商購買。
證書有很多類型,按認證級別分類:
EV證書瀏覽器地址欄樣式:
OV證書瀏覽器地址欄樣式:
DV證書瀏覽器樣式:
按覆蓋範圍分類:
認證級別越高,覆蓋範圍越廣的證書,價格越貴 。也有免費的證書,為了推廣Https,電子前哨基金會成立了 Let's Encrypt 提供免費證書。
證書的經銷商也很多,知名度比較高的有 亞洲誠信(Trust Asia) 。
加密算法分為 對稱加密 、 非對稱加密 和 Hash加密 算法。
對稱加密算法加解密效率高,速度快,適合大數據量加解密。常見的堆成加密算法有 DES、AES、RC5、Blowfish、IDEA
非對稱加密算法復雜,加解密速度慢,但安全性高,壹般與對稱加密結合使用(對稱加密通信內容,非對稱加密對稱秘鑰)。常見的非對稱加密算法有 RSA、DH、DSA、ECC
Hash算法特性是:輸入值壹樣,經過哈希函數得到相同的散列值,但並非散列值相同則輸入值也相同。常見的Hash加密算法有 MD5、SHA-1、SHA-X系列
下面著重介紹壹下RSA算法和DH算法。
Https協議就是使用RSA加密算法,可以說RSA加密算法是宇宙中最重要的加密算法。
RSA算法用到壹些數論知識,包括 互質關系,歐拉函數,歐拉定理 。此處不具體介紹加密的過程,如果有興趣,可以參照 RSA算法加密過程 。
RSA算法的安全保障基於 大數分解問題 ,目前破解過的最大秘鑰是700+位,也就代表1024位秘鑰和2048位秘鑰可以認為絕對安全。
大數分解主要難點在於計算能力,如果未來計算能力有了質的提升,那麽這些秘鑰也是有可能被破解的。
DH也是壹種非對稱加密算法, DH加密算法過程 。
DH算法的安全保障是基於 離散對數問題 。
Http和Https的區別如下:
經過了3天的學習總結,總算完成了這篇文章,本文可以幫助讀者大體上把握Http和Https的知識框架。並沒有深入探討每個主題的內容,當讀者有了自己知識框架之後,可以自行深入了解每個知識點的內容。
這邊提供壹份總結資料: 計算機網絡相關知識匯總 。