背景
在運維面試中,經常會遇到面試官提問http和https的區別,今天咱們先來簡單了解一下。
超文本傳輸協議HTTP被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:各種密碼,銀行卡號等重要信息。
為了解決HTTP協議的這個安全問題,需要使用另一種協議:HTTPS超文本傳輸安全協議,為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。
基本概念
HTTP
HTTP(Hyper Text Transfer Protocol)全稱為超文本傳輸協議,是一個簡單的請求——響應協議:
- HTTP協議規定了如何從網站服務器傳輸超文本到本地瀏覽器;
- HTTP協議基于客戶端服務器架構工作,是客戶端(用戶)和服務器端(網站)請求和應答的標準。
- HTTP協議可以使瀏覽器更加高效,使網絡傳輸減少。
- HTTP協議不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。
HTTPS
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer),超文本傳輸安全協議:
- 是以安全為目標的 HTTP 通道,在HTTP的基礎上通過傳輸加密和身份認證保證了傳輸過程的安全性。
- HTTPS 在HTTP 的基礎下加入SSL,HTTPS 的安全基礎是 SSL,因此加密的詳細內容就需要 SSL。
- HTTPS 存在不同于 HTTP 的默認端口及一個加密/身份驗證層(在 HTTP與 TCP 之間)。這個系統提供了身份驗證與加密通訊方法。它被廣泛用于萬維網上安全敏感的通訊,例如交易支付等方面。
- HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。
區別
HTTP協議傳輸的數據都是未加密的,也就是明文的,因此使用HTTP協議傳輸隱私信息非常不安全,為了保證這些隱私數據能加密傳輸,于是網景公司設計了SSL(Secure Sockets Layer)協議用于對HTTP協議傳輸的數據進行加密,從而就誕生了HTTPS。簡單來說,HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比http協議安全。
HTTPS和HTTP的區別主要如下:
- https協議需要到CA(Certificate Authority,數字證書認證機構)申請證書,一般免費證書較少,因而需要一定費用。
- http是明文傳輸,數據未加密,安全性差;https則是具有安全性的ssl加密傳輸協議,安全性好。
- http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
- http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
- http頁面響應速度比https快,因為http使用TCP三次握手建立連接,客戶端和服務器需要交換 3 個包,而https除了TCP的三個包,還要加上ssl握手需要的 9 個包,所以一共是 12 個包。
- https=SSL/TLS+http,所以,https比http要更耗費服務器資源。
工作原理
HTTP工作原理
(1)客戶端與服務器建立連接。該連接是通過TCP 來完成的,一般端口號是80。
(2)客戶向服務器提出請求。請求方式的格式為:統一資源標識符(URL)、協議版本號,后邊是 MIME 信息包括請求修飾符、客戶機信息和許可內容。
(3)服務器接受請求,并根據請求返回相應的文件作為應答。格式:一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,后邊是 MIME 信息包括服務器信息、實體信息和可能的內容。
(4)客戶與服務器關閉連接。
HTTPS工作原理
我們都知道HTTPS能夠加密信息,以免敏感信息被第三方獲取,現在絕大多數網站都會采用安全級別較高的HTTPS協議,即使用戶訪問http協議的網站,也會跳轉到https協議類型的網站。
客戶端在使用HTTPS方式與Web服務器通信時有以下幾個步驟,如下圖所示。
步驟分析:
(1)客戶端向服務端443端口發起HTTPS請求。該請求中攜帶了客戶端支持的加密算法和哈希算法;
(2)服務端收到請求,選擇瀏覽器支持的加密算法和哈希算法。
(3)服務端將算法和數字證書發送給客戶端。該證書包含了用于認證目的的服務器標識,可以是向某個可靠機構申請的,也可以是自制的;
(4)客戶端對服務器端的證書進行驗證,這一部分是瀏覽器內置的TLS完成的,具體步驟如下:
首先瀏覽器會從內置的證書中搜索,找到該證書對應的機構,如果查到了對應的機構,則取出該機構頒發的公鑰;如果沒有找到,此時瀏覽器就會提示用戶該證書不是由權威機構頒發,是不可信任的。
然后用機構的證書公鑰解密,得到證書的內容和證書簽名,內容包括網站的網址、網站的公鑰、證書的有效期等。瀏覽器會先驗證簽名的合法性,簽名通過后,瀏覽器驗證證書記錄的網址是否和當前網址是一致的,不一致會提示用戶。如果網址一致會檢查證書有效期,證書過期了也會提示用戶。這些都通過認證時,瀏覽器就可以安全使用證書中的網站公鑰了。
服務器生成一個隨機密碼串pre_master_secret,并使用服務器的公鑰對其進行加密。
(5)客戶端將加密的隨機密碼串傳送給服務端。
(6)服務器用自己的私鑰解密得到隨機密碼串(私鑰),然后通過該隨機密碼串把網頁內容進行對稱加密,并傳輸給瀏覽器。
(7)瀏覽器用之前生成的私鑰解密算法獲取網頁內容。
HTTPS優缺點
優點
(1)使用HTTPS協議可認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
(2)HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,要比HTTP安全,可防止數據在傳輸過程中被竊取、改變,確保數據的完整性。
(3)HTTPS是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。
缺點
(1)相同網絡環境下,HTTPS協議會使頁面的加載時間延長,耗電增加。此外,HTTPS協議還會影響緩存,增加數據開銷和功耗。
(2)HTTPS協議的安全是有范圍的,在黑客攻擊、拒絕服務攻擊和服務器劫持等方面幾乎起不到什么作用。
(3)SSL 證書的信用鏈體系并不安全。特別是在某些國家可以控制 CA 根證書的情況下,中間人攻擊一樣可行。
(4)SSL證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。
(5)SSL證書通常需要綁定IP,不能在同一IP上綁定多個域名,IPv4資源不可能支撐這個消耗。
HTTP請求消息和響應消息
在HTTP請求和響應的過程中傳遞的數據塊就叫HTTP消息,包括要傳送的數據和一些附加信息,并且要遵守規定好的格式。
請求消息
請求消息是指客戶端向服務器端發送請求時所攜帶的數據塊,來自客服端。
請求方式用來規定客戶端與服務器端聯系的類型。
HTTP協議中客戶端8種請求方式如下:
請求方式 | 說明 |
---|---|
Get | 向特定資源發出請求(請求指定頁面信息,并返回實體主體) |
Post | 向指定資源提交數據進行處理請求(提交表單、上傳文件),可能導致新的資源的建立或原有資源的修改 |
Put | 向指定資源位置上上傳其最新內容(從客戶端向服務器傳送的數據取代指定文檔的內容) |
Head | 與服務器索與get請求一致的相應,響應體不會返回,獲取包含在小消息頭中的原信息(與get請求類似,返回的響應中沒有具體內容,用于獲取報頭) |
opions | 返回服務器針對特定資源所支持的HTML請求方法 或web服務器發送*測試服務器功能(允許客戶端查看服務器性能) |
Delete | 請求服務器刪除request-URL所標示的資源*(請求服務器刪除頁面) |
Trace | 回顯服務器收到的請求,用于測試和診斷 |
Connect | HTTP/1.1協議中能夠將連接改為管道方式的代理服務器 |
響應消息
響應消息是指服務器端向客戶端進行響應請求時所攜帶的數據塊,來自服務端
在響應消息中,對于客戶端的每一次請求,服務器端都要給予響應,在響應的時候我們可以通過狀態碼告訴客戶端此次請求是成功還是失敗。
狀態代碼由3位數字組成,表示請求是否被理解或被滿足。HTTP響應狀態碼的第一個數字定義了響應的類別,后面兩位沒有具體的分類,第1位數字有5種可能的取值,大致了解:
1**:請求已接收,需要繼續處理。
2**:請求已成功被服務器接收、理解并接受。
3**:為完成請求,客戶端需進一步細化請求。
4**:客戶端的請求有錯誤。
5**:服務器端出現錯誤。
HTTP協議常見的狀態碼
狀態碼 | 說明 |
---|---|
200 | 表示服務器成功處理了客戶端的請求 |
302 | 表示請求的資源臨時從不同的URI響應請求,但請求者應繼續使用原有位置來進行以后的請求 |
404 | 表示服務器找不到請求的資源 |
400 | 表示客戶端請求有語法錯誤 |
500 | 表示服務器發生錯誤,無法處理客戶端的請求 |
更多關于Linux的知識請前往博客主頁查看,編寫過程中可能由于能力有限難免出現問題,敬請指出,謝謝。