1. 程式人生 > >前端面試總結 -- 網路基礎之 HTTP 和 HTTPS

前端面試總結 -- 網路基礎之 HTTP 和 HTTPS

基本概念

  • HTTP:超文字傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用於分散式、協作式和超媒體資訊系統的應用層協議[1]。HTTP是全球資訊網的資料通訊的基礎。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源識別符號(Uniform Resource Identifiers,URI)來標識。
  • 超文字傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種通過計算機網路進行安全通訊的傳輸協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密資料包。HTTPS開發的主要目的,是提供對網站伺服器的身份認證,保護交換資料的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨後擴充套件到網際網路上。歷史上,HTTPS連線經常用於全球資訊網上的交易支付和企業資訊系統中敏感資訊的傳輸,現在HTTPS開始廣泛使用於保護所有型別網站上的網頁真實性,保護賬戶和保持使用者通訊,身份和網路瀏覽的私密性。

HTTP 工作流程

  1. 地址解析,從url中解析協議名稱,主機名,埠號和對應的頁面地址。
  2. 封裝http的請求資料包:這一步主要是封裝自己的資訊,比如在post請求時,我們會塞進一個data資料。
  3. 封裝tcp包,建立連線:因為是基於tcp的協議,網路連線是tcp來完成的,必然要封裝成tcp包,然後tcp再做自己工作,比如封裝ip包,一層層往下傳。
  4. 傳送請求:資料整好了,連線也完事了,那就傳送action了。
  5. 服務端響應:接受到請求,然後給出響應。
  6. 服務端關閉tcp的連線:一次通訊完成之後,若conection的設定不是keep-live的話,服務端會自動關閉tcp的連線。

HTTP 的不足

  1. http協議的所有傳輸內容都是明文,即便是自己加密了,但是加密的內容也依舊是明文,這就避免不了被竊聽!
  2. http協議傳輸的過程中沒有身份驗證這一說,這樣就不免半路殺出一個不明身份就行身份冒充!
  3. http協議傳輸的過程中也並沒有進行資料完整性的校驗,不免有些人在中途進行內容篡改!

HTTPS 原理

針對 HTTP 以上的幾個問題,HTTPS 應運而生,在 HTTPS 中增加了兩種技術:加密技術和身份驗證。

加密技術

加密技術主要用到以DES為代表的對稱加密演算法和以RSA為代表的非對稱加密演算法。

對稱加密演算法一般很難破解,但是不太好保管,安全性也不是很高,為啥呢?因為客戶端和服務端拿到的金鑰是一樣的,不可能每次都把key給改了,而不改的話,一直用同一個key的話也會存在安全隱患。

因此https的加密的方式採取的是混合方式。交換金鑰的時候採取非對稱的,建立通訊交換報文的時候採取對稱加密的方法。

身份驗證技術

所謂身份驗證就是用公鑰生成可信賴的證書。因為非對稱加密存在一個問題就是沒法驗證拿到的公鑰就是服務端公開的公鑰。

為了解決以上問題,CA應用而生(Certifity Authority),數字證書認證機構。在網上找到一張圖,一看就明白了
這裡寫圖片描述

HTTPS 工作流程

這裡寫圖片描述

  1. client 發出請求
  2. server 收到請求,並自己生成一對金鑰,即 公鑰S 和 私鑰S
  3. server 把生成的 公鑰S 傳遞給 client (除了 公鑰S ,還有很多額外資訊)
  4. client 收到 公鑰S 後進行判斷,若無效,彈出警告,否則生成一串隨機數,我們稱之為 私鑰C ,然後 client 用 server 傳過來的 公鑰S 對該隨機數加密,形成加密後的私鑰C
  5. client 把加密的私鑰C 傳遞給 server
  6. server 收到加密的私鑰C,用 私鑰S 把加密的私鑰C 解密成 私鑰C,然後把需要傳遞的資料用 私鑰C 進行加密
  7. server 把加密後的資料傳遞給 client
  8. client 收到加密的資料,用 私鑰C 解密,完成一次通訊過程

上面的流程涉及到了對稱加密和非對稱加密相關的知識

  • 對稱加密是指加密和解密用一致的金鑰,特點是快。典型的對稱加密演算法有DES、AES等
  • 非對稱加密是指金鑰區分公鑰和私鑰,公鑰加密,私鑰解密(私鑰好比唯一一把鑰匙,公鑰好比鎖,鑰匙只有一把,但鎖可以有很多,被鎖頭鎖上的資料全天下只有一把私鑰才能開啟),特點是安全,但是慢。典型的非對稱加密演算法有RSA、DSA等
    這裡寫圖片描述

HTTPS 的流程綜合了對稱加密和非對稱加密的優點,利用非對稱加密的安全性來加密那一串隨機數–私鑰C,利用對稱加密的快捷性來加密報文,總體來說就是把真正加密解密的金鑰(私鑰C)用公鑰S和私鑰S來加密,這就是 HTTPS 的工作流程,

HTTPS 的優缺點

優點

  1. 使用HTTPS 協議可認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器;
  2. HTTPS 協議是由 SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議,要比 http 協議安全,可防止資料在傳輸過程中不被竊取、改變,確保資料的完整性。
  3. HTTPS 是現行架構下最安全的解決方案,雖然不是絕對安全,但它大幅增加了中間人攻擊的成本。

缺點

  1. HTTPS 比HTTP耗費更多伺服器資源(https其實就是建構在SSL/TLS之上的 http協議,所以要比較https比http多用多少伺服器資源,主要看SSL/TLS本身消耗多少伺服器資源。)
  2. 耗費的資源多,過程也複雜,想當然訪問不如HTTP高效。大流量網站非必要也不會採用,流量成本太高。  
  3. HTTPS 並不能防止站點被網路蜘蛛抓取。在某些情形中,被加密資源的URL可僅通過截獲請求和響應的大小推得,這就可使攻擊者同時知道明文(公開的靜態內容)和密文(被加密過的明文),從而使選擇密文攻擊成為可能。  
  4. SSL 證書需要錢,功能越強大的證書費用越高,個人網站、小網站沒有必要一般不會用。  
  5. SSL 證書通常需要繫結IP,不能在同一IP上繫結多個域名,IPv4資源不可能支撐這個消耗。

HTTP和HTTPS的差異

  1. 從上面概念也可以看出來HTTP是不安全的,且攻擊者通過監聽和中間人攻擊等手段,可以獲取網站帳戶和敏感資訊等。HTTPS被設計為可防止前述攻擊,並在正確配置時被認為是安全的。  
  2. HTTP的URL由“http://”起始且預設使用埠80,而HTTPS的URL由“https://”起始且預設使用埠443。  
  3. HTTP協議執行在TCP之上,所有傳輸的內容都是明文,客戶端和伺服器端都無法驗證對方的身份。HTTPS是執行在SSL/TLS之上的HTTP協議,SSL/TLS執行在TCP之上。所有傳輸的內容都經過加密,加密採用對稱加密,但對稱加密的金鑰用伺服器方的證書進行了非對稱加密。

總結

以上就是我整理的 HTTP 和 HTTPS 的相關知識。另外提一下,就在不久前,Google 已經宣佈 Chrome 很快將不再支援 HTTP 的網站,所以如果自家的網站還不是 HTTPS 的話,趕緊行動吧,時間不多了。