1 .HTTP和HTTPS的概念
HTTP:是互聯網上應用最為廣泛的一種網絡協議,是一個客戶端和服務器端請求和應答的標准(TCP),用於從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議,它可以使瀏 覽器更加高效,使網絡傳輸減少。http協議屬於明文傳輸協議,交互過程以及數據傳輸都沒有進行加密,通信雙方也沒有進行任何認證,通信過程非常容易遭遇劫持、監聽、篡改,嚴重情況下,會造成惡意的流量劫持等問題,甚至造成個人隱私泄露(比如銀行卡卡號和密碼泄露)等嚴重的安全問題。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
2. HTTP和HTTPS的工作原理:
HTTP:當用戶在瀏覽器的地址欄中輸入所要訪問Web的URI以后,HTTP的處理過程即會開始,HTTP中默認的端口是80端口,它的工作機制,首先是客戶端向服務器的80端口建立一個TCP連接,贊后然后再這個連接上進行請求和應答以及數據報文的發送。具體過程成如下:
一次HTTP操作稱為一個事務,其工作整個過程如下:
(1)、地址解析
如用客戶端瀏覽器請求這個頁面:http://localhost.com:8080/index.htm
從中分解出協議名、主機名、端口、對象路徑等部分,對於我們的這個地址,解析得到的結果如下:
協議名:http
主機名:localhost.com
端口:8080
對象路徑:/index.html
在這一步,需要域名系統DNS解析域名localhost.com,得主機的IP地址。
(2) 封裝HTTP請求數據包
把以上部分結合本機自己的信息,封裝成一個HTTP請求數據包
(3) 封裝成TCP包,建立TCP連接(TCP的三次握手)
在HTTP工作開始之前,客戶機(Web瀏覽器)首先要通過網絡與服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之后才能,才能進行高層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。這里是8080端口
(4)客戶機發送請求命令
建立連接后,客戶機發送一個請求給服務器,請求方式的格式為:統一資源標識符(URL)、協議版本號,后邊是MIME信息包括請求修飾符、客戶機信息和可內容。
(5)服務器響應
服務器接到請求后,給予相應的響應信息,其格式為一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,后邊是MIME信息包括服務器信息、實體信息和可能的內容。
實體消息是服務器向瀏覽器發送頭信息后,它會發送一個空白行來表示頭信息的發送到此為結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據
(6)服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP連接在發送后將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬。
服務器將響應信息傳給客戶端,響應體中的內容可能是一個html頁面,也可能是一張圖片,通過輸入流將其讀出,並寫回到顯示器上。
HTTPS:HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密后的數據。服務器在給客戶端發送的數據是加密的,只有服務器和客戶端才能讀懂,而且在進行數據交互的時,還需要用對稱秘鑰(下面有概念)進行驗證,但是服務器又是如何將對稱秘鑰發送給客戶端?(下面將會講到)
3. HTTP和HTTPS的區別:
(1)HTTPS 協議需要到CA(電子商務認證機構)申請證書,一般免費證書很少,需要交費。
(2)HTTP 是超文本傳輸協議,信息是明文傳輸,HTTPS 則是具有安全性的ssl加密傳輸協議
(3)HTTP 和 HTTPS 使用的是完全不同的連接方式用的端口也不一樣,前者是80,后者是443。
(4)HTTP 的連接很簡單,是無狀態的
(5)HTTPS 協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議 要比 HTTP 協議安全
(6)HTTPS 內容傳輸經過完整性校驗
(7)HTTPS 內容經過對稱加密,每個連接生成一個唯一的加密密鑰
(8)HTTPS 第三方無法偽造服務端(客戶端)身份
4.HTTPS的加密算法
首先介紹兩個概念:
對稱秘鑰:對稱密鑰加密又叫專用密鑰加密,即發送和接收數據的雙方必使用相同的密鑰對明文進行加密和解密運算。通常有兩種模式:流加密和分組加密。
非對稱秘鑰:非對稱加密算法需要兩個密鑰:公開秘鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。
4.1 HTTPS保證數據安全的機制:
在HTTP的概念中介紹了HTTP是非常不安全的,那么在服務器與客戶端傳遞數據的過程中HTTPS是如何保證數據的安全呢?
1.客戶端向服務器端發起SSL連接請求;(在此過程中依然存在數據被中間方盜取的可能,下面將會說明如何保證此過程的安全)
2 服務器把公鑰發送給客戶端,並且服務器端保存着唯一的私鑰;
3.客戶端用公鑰對雙方通信的對稱秘鑰進行加密,並發送給服務器端;
4.服務器利用自己唯一的私鑰對客戶端發來的對稱秘鑰進行解密,在此過程中,中間方無法對其解密(即使是客戶端也無法解密,因為只有服務器端擁有唯一的私鑰),這樣保證了對稱秘鑰在收發過程中的安全,此時,服務器端和客戶端擁有了一套完全相同的對稱秘鑰。
5.進行數據傳輸,服務器和客戶端雙方用公有的相同的對稱秘鑰對數據進行加密解密,可以保證在數據收發過程中的安全,即是第三方獲得數據包,也無法對其進行加密,解密和篡改。
