http,https的工作流程

田小菜發表於2019-05-11

一,http

1. http協議介紹

(1) HTTP協議(HyperText Transfer Protocol,超文字傳輸協議),
    是因特網上應用最為廣泛的一種網路傳輸協議,
    所有的WWW檔案都必須遵守這個標準;
(2) http是基於TCP/IP通訊協議來傳遞資料的(HTML 檔案, 圖片檔案, 查詢結果等);
(3) HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,
    這個時候,就成了我們常說的HTTPS;
(4) HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端伺服器模型,
    HTTP是一個無狀態的協議;
(5) HTTP預設的埠號為80,HTTPS的埠號為443複製程式碼

2. http的工作流程

  • 一次HTTP操作稱為一個事務,其工作過程大概如下:
(1)使用者在瀏覽器輸入URL網址;
(2)瀏覽器根據URL網址中的域名,通過DNS解析出伺服器IP地址;
(3)然後通過TCP/IP協議來和服務端建立連結(TCP三次握手);
(4)建立連結後,傳送請求給伺服器;
(5)伺服器回覆瀏覽器請求;
(6)瀏覽器拿到對應的html等資源,渲染頁面
複製程式碼
  • 一般情況下,一旦Web伺服器向瀏覽器傳送了請求資料,它就要關閉TCP連線,
  • 然後如果瀏覽器或者伺服器在其頭資訊加入了這行程式碼:Connection:keep-alive,
  • TCP連線在傳送後將仍然保持開啟狀態,於是,
  • 瀏覽器可以繼續通過相同的連線傳送請求。
  • 保持連線節省了為每個請求建立新連線所需的時間,還節約了網路頻寬。

3. 短連結(瞭解)

短連線的操作步驟是:
建立連線——資料傳輸——關閉連線,...建立連線——資料傳輸——關閉連線;

如果客戶請求頻繁,將在TCP的建立和關閉操作上浪費較多時間和頻寬;
複製程式碼

4. 長連結(瞭解)

長連結,指在一個連線上可以連續傳送多個資料包,
在連線保持期間,如果沒有資料包傳送,需要雙方發鏈路檢測包。

長連結操作步驟: 建立連線——資料傳輸...(保持連線)...資料傳輸——關閉連線。

長連線可以省去較多的TCP建立和關閉的操作,減少浪費,節約時間。
複製程式碼

5. http存在的安全問題

  1. 可能被竊聽
(1) HTTP 本身不具備加密的功能,HTTP 報文使用明文方式傳送;
(2) 由於網際網路是由聯通世界各個地方的網路設施組成,
    所有傳送和接收經過某些裝置的資料都可能被截獲或窺視。
    (例如大家都熟悉的抓包工具:Wireshark);
複製程式碼
  1. 認證問題
無法確認你傳送到的伺服器就是真正的目標伺服器(可能伺服器是偽裝的);
無法確定返回的客戶端是否是按照真實意圖接收的客戶端(可能是偽裝的客戶端);
複製程式碼
  1. 可能被篡改
請求或響應在傳輸途中,
遭攻擊者攔截並篡改內容的攻擊被稱為中間人攻擊(Man-in-the-Middle attack,MITM)。
複製程式碼

二,https

  • 基於http存在的一些安全問題,出現了https來解決這類問題

1. https的介紹

超文字傳輸安全協議(英語:Hypertext Transfer Protocol Secure,
縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure),
是一種通過計算機網路進行安全通訊的傳輸協議。
HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密資料包。
HTTPS開發的主要目的,是提供對網站伺服器的身份認證,
保護交換資料的隱私與完整性。

簡言之,就是對http加了一層安全策略
複製程式碼

2. HTTPS怎麼解決http存在的安全問題的?

  • HTTPS是在通訊介面部分用 TLS(Transport Layer Security 傳輸層安全性協議);
  • TLS協議採用主從式架構模型,用於在兩個應用程式間通過網路建立起安全的連線,防 止在交換資料時受到竊聽及篡改;
    http,https的工作流程

3. SSL和TLS的關係

(1)傳輸層安全性協議(英語:Transport Layer Security,縮寫作 TLS),
及其前身安全套接層(Secure Sockets Layer,縮寫作 SSL)是一種安全協議,
目的是為網際網路通訊,提供安全及資料完整性保障。

(2)網景公司(Netscape)在1994年推出首版網頁瀏覽器,
網景導航者時,推出HTTPS協議,以SSL進行加密,這是SSL的起源。

(3)IETF將SSL進行標準化,1999年公佈第一版TLS標準檔案。
隨後又公佈RFC 5246 (2008年8月)與 RFC 6176 (2011年3月)。
在瀏覽器、電子郵件、即時通訊、VoIP、網路傳真等應用程式中,廣泛支援這個協議。
複製程式碼

4. TLS/SSL 協議

HTTPS 協議的主要功能基本都依賴於 TLS/SSL 協議,
TLS/SSL 的功能實現主要依賴於三類基本演算法:雜湊函式 、對稱加密和非對稱加密,
其利用非對稱加密實現身份認證和金鑰協商,對稱加密演算法採用協商的金鑰對資料加密,
基於雜湊函式驗證資訊的完整性。
複製程式碼

http,https的工作流程

5. https工作流程的通俗解釋

  • 信鴿解釋,愛麗絲和鮑勃是通過信鴿異地聯絡

1. 開始階段

愛麗絲給鮑勃發了個飛鴿傳書。鮑勃收到了。很happy

但壞蛋馬洛裡攔截了愛麗絲的鴿子並且篡改了資訊呢?
鮑勃就沒有辦法去知道愛麗絲髮出的資訊在傳遞過程中遭到了修改。
複製程式碼

2. 於是,愛麗絲和鮑勃見面商量後,決定對飛鴿傳書內容進行加密。

加密方式:他們會將資訊中的每個字母按照字母表中的順序前移三位。
比如,D→A,E→B,F→C。如此一來,原文為 “secret” 的資訊就變成了 “pbzobq” 。

這下。當愛麗絲給鮑勃再發了個飛鴿傳書時。
壞蛋馬洛裡攔截了資訊也沒用;他不知道解密規則。

此時鮑勃收到資訊訊息後,再根據和愛麗絲商量的規則解密獲取資訊。
他很得意自己的聰明才智。

他們的做法就是對稱加密

但他們的做法存在一些問題。
他們需要見面才能確定加密方式。這顯然不方便。
複製程式碼

3. 問題是如果愛麗絲和鮑勃在開始用信鴿傳信之前沒有見過面怎麼辦,

他們沒有一個安全的方式來確立密匙。如果他們自己來在信中傳遞密匙,
馬洛裡就會截獲資訊並發現密匙。

這就使得馬洛裡可以在愛麗絲和鮑勃開始加密他們的資訊之前或之後,
閱讀到他們資訊的內容並按照她的意願來篡改資訊。

這是一個中間人攻擊的典型例子,避免這個問題的唯一方法就是收發信的兩方一起確定加密方式。

4. 通過信鴿傳遞盒子

所以愛麗絲和鮑勃就想出了一個更好的系統。
當鮑勃想要給愛麗絲髮送資訊時,他會按照如下的步驟來進行:

鮑勃向愛麗絲送一隻沒有攜帶任何資訊的鴿子。

愛麗絲給鮑勃送回鴿子,並且這隻鴿子帶有一個有開著的鎖的盒子,愛麗絲保管著鎖的鑰匙。

鮑勃把信放進盒子中,把鎖鎖上然後把盒子送給愛麗絲。

愛麗絲收到盒子,用鑰匙開啟然後閱讀資訊。

複製程式碼

這樣馬洛裡就不能通過截獲鴿子來篡改資訊了,因為她沒有開啟盒子的鑰匙。
當愛麗絲要給鮑勃傳送訊息的時候同樣按照上述的流程。

愛麗絲和鮑勃所使用的流程通常被稱為非對稱金鑰加密。之所以稱之為非對稱,是因為即使是你把資訊編碼(鎖上盒子)也不能破譯資訊(開啟鎖住的盒子)

在術語中,盒子被稱為公匙而用來開啟盒子的鑰匙被稱為私匙

上面方式還是會存在問題;
當鮑勃收到盒子時他如何能確定這個盒子來自愛麗絲的,
而不是馬洛裡截獲了鴿子然後換了一個她有鑰匙能開啟的盒子呢?
複製程式碼

5.如何信任盒子

愛麗絲決定簽名標記一下盒子,這樣鮑勃收到盒子的時候就可以檢查簽名來確定是愛麗絲送出的盒子了。

那麼鮑勃如何打一開始就能識別出愛麗絲的簽名呢?這是個好問題。愛麗絲和鮑勃也確實有這個問題,所以他們決定讓泰德代替愛麗絲來標記這個盒子。

那麼誰是泰德呢?泰德很有名的,是一個值得信任的傢伙。他會給任何人簽名並且所有人都信任他只會給合法的人簽名標記盒子。

如果泰德可以確認索要簽名的人是愛麗絲,他就會在愛麗絲的盒子上簽名。因此馬洛裡就不可能搞到一個有著泰德代表愛麗絲簽了名的盒子,因為鮑勃知道泰德只會給他確認過的人簽名,從而識破馬洛裡的詭計。

泰德的角色在術語中被稱為認證機構。而你閱讀此文時所用的瀏覽器打包存有許多認證機構的簽名。

所以當你首次接入一個網站的時候你可以信任來自這個站點的盒子因為你信任泰德而泰德會告訴你盒子是合法的。

上述方式雖然比較完美的解決來存在的安全問題。
but,盒子裝東西太多太重。讓飛鴿傳書很慢。
這也是個問題。。
複製程式碼

6. 如何解決盒子太重問題

現在愛麗絲和鮑勃有了一個可靠的系統來進行交流,然他們也意識到讓鴿子攜帶盒子比原本只攜帶信件要慢一些。

因此他們決定只有在選擇用對稱加密來給資訊編碼(還記得凱撒加密法吧?)的密匙時,使用傳遞盒子的方法(非對稱加密)。

這樣就可以二者的優點兼具了,非對稱加密的可靠性和對稱加密的高效性。

現實世界中我們不會用信鴿這樣慢的送信手段,但用非對稱加密來編碼資訊仍要慢於使用對稱加密技術,所以我們只有在交換編碼密匙的時候會使用非對稱加密技術。

那麼相信現在的你已經大概瞭解了HTTPS是如何工作的了~~~