https 協議的實現原理
1、大致了解幾個基本術語(https、ssl、tls)的含義
2、大致了解 http 和 tcp 的關係(尤其是 「短連線」vs「長連線」)
3、大致了解加密演算法的概念(尤其是 「對稱加密與非對稱加密」 的區別)
4、大致了解 ca 證書的用途
1. 「http」簡介
http 是乙個網路協議,是專門用來幫你傳輸 web 內容滴。關於這個協議,就算你不了解,至少也聽說過吧?比如你訪問俺的部落格的主頁,瀏覽器位址列會出現如下的**
2. 「ssl/tls」
ssl 是洋文 「secure sockets layer」 的縮寫,中文叫做 「安全套接層」。它是在上世紀 90 年代中期,由網景公司設計的。(順便插一句,網景公司不光發明了 ssl,還發明了很多 web 的基礎設施——比如「css 樣式表」 和「js 指令碼」) 為啥要發明 ssl 這個協議捏?因為原先網際網路上使用的 http 協議是明文的,存在很多缺點——比如傳輸內容會被**(嗅探)和篡改。發明 ssl 協議,就是為了解決這些問題。
*3. 「https」
https 協議,說白了就是 「http 協議」 和「ssl/tls 協議」的組合。你可以把 https 大致理解為——「http over ssl」或「http over tls」(反正 ssl 和 tls 差不多)。
4. http 和 tcp 之間的關係
簡單地說,tcp 協議是 http 協議的基石——http 協議需要依靠 tcp 協議來傳輸資料。在網路分層模型中,tcp 被稱為 「傳輸層協議」,而 http 被稱為 「應用層協議」。
有很多常見的應用層協議是以 tcp 為基礎的,比如 「ftp、smtp、pop、imap」 等。
tcp 被稱為 「面向連線」 的傳輸層協議。關於它的具體細節,俺就不展開了(否則篇幅又失控了)。你只需知道:傳輸層主要有兩個協議,分別是 tcp 和 udp。tcp 比 udp 更可靠。你可以把 tcp 協議想象成某個水管,傳送端這頭進水,接收端那頭就出水。並且 tcp 協議能夠確保,先傳送的資料先到達(與之相反,udp 不保證這點)。
http 協議如何使用 tcp 連線?
http 對 tcp 連線的使用,分為兩種方式:俗稱 「短連線」 和「長連線」(「長連線」又稱 「持久連線」,洋文叫做「keep-alive」 或「persistent connection」) 假設有乙個網頁,裡面包含好多,還包含好多外部的css 檔案和 js 檔案。在 「短連線」 的模式下,瀏覽器會先發起乙個 tcp 連線,拿到該網頁的 html 源**(拿到 html 之後,這個 tcp 連線就關閉了)。然後,瀏覽器開始分析這個網頁的原始碼,知道這個頁面包含很多外部資源(、css、js)。
然後針對每乙個外部資源,再分別發起乙個個 tcp 連線,把這些檔案獲取到本地(同樣的,每抓取乙個外部資源後,相應的 tcp 就斷開) 相反,如果是 「長連線」 的方式,瀏覽器也會先發起乙個 tcp 連線去抓取頁面。但是抓取頁面之後,該 tcp 連線並不會立即關閉,而是暫時先保持著(所謂的「keep-alive」)。然後瀏覽器分析 html 原始碼之後,發現有很多外部資源,就用剛才那個 tcp 連線去抓取此頁面的外部資源。
在 http 1.0 版本,預設使用的是 「短連線」(那時候是 web 誕生初期,網頁相對簡單,「短連線」 的問題不大); 到了 1995 年底開始制定 http 1.1 草案的時候,網頁已經開始變得複雜(網頁內的、指令碼越來越多了)。這時候再用短連線的方式,效率太低下了(因為建立 tcp 連線是有 「時間成本」 和「cpu 成本」滴)。
所以,在 http 1.1 中,預設採用的是 「keep-alive」 的方式。 關於 「keep-alive」 的更多介紹,可以參見維基百科詞條。
「加密」 和「解密」?
「加密」的過程,就是把 「明文」 變成 「密文」 的過程;反之,「解密」的過程,就是把 「密文」 變為「明文」。在這兩個過程中,都需要乙個關鍵的東東——叫做「金鑰」——來參與數**算。
「對稱加密」?
「對稱加密技術」,意思就是說:「加密」 和「解密」使用相同的金鑰。這個比較好理解。就好比你用 7zip 或 winrar 建立乙個帶密碼(口令)的加密壓縮包。當你下次要把這個壓縮檔案解開的時候,你需要輸入同樣的密碼。在這個例子中,密碼 / 口令就如同剛才說的「金鑰」。
「非對稱加密」?
意思就是說:「加密」 和「解密」使用不同的金鑰
打個比方:如果原來的 http 是塑料水管,容易被戳破;那麼如今新設計的 https 就像是在原有的塑料水管之外,再包一層金屬水管。一來,原有的塑料水管照樣執行;二來,用金屬加固了之後,不容易被戳破。
保密性
https 需要做到足夠好的保密性。說到保密性,首先要能夠對抗嗅探(行話叫 sniffer)。所謂的 「嗅探」,通俗而言就是監視你的網路傳輸流量。如果你使用明文的 http 上網,那麼監視者通過嗅探,就知道你在訪問哪些**的哪些頁面。
在發明 https 之前,由於 http 是明文的,不但容易被嗅探,還容易被篡改。
ssl 是在1995 年之前開始設計的,那時候的 http 版本還是 1.0,預設使用的是 「短連線」 的 tcp 方式——預設不啟用 keep-alive)。
Https SSL TLS以及證書入門
https是基於tls ssl的安全套接字應用層協議,除了傳輸層進行加密外,其它與常規http協議基本保持一致。所以此處主要介紹後面的tls ssl和證書。tls協議的基本思路是採用非對稱加密的演算法,客戶端先獲取到伺服器端的公鑰,然後用公鑰加密資訊,伺服器端收到密文後,用自己的私鑰解密。tls協議...
TCP IP協議原理
tcp協議原理 tcp每傳送乙個報文段,就啟動乙個定時器,如果在定時器超時之後還沒有收到ack確認,就重傳該報文。如圖所示,資料報由a的緩衝區發往b,b在收到資料報以後,回發乙個ack確認包給a,之後a將該資料報從緩衝區釋放。因此,該資料報會一直快取在a的緩衝區,直到乙個ack確認為止。在tcp i...
TCP IP協議原理
tcp每傳送乙個報文段,就啟動乙個定時器,如果在定時器超時之後還沒有收到ack確認,就重傳該報文。如圖所示,資料報由a的緩衝區發往b,b在收到資料報以後,回發乙個ack確認包給a,之後a將該資料報從緩衝區釋放。因此,該資料報會一直快取在a的緩衝區,直到乙個ack確認為止。在tcp ip協議中,tcp...