一分鐘理解HTTPS到底解決了什麼問題

jsjsjjs發表於2018-10-24

本文原作者“虞大膽的嘰嘰喳喳”,原文連結:jianshu.com/p/8861da5734ba,感謝原作者。

1、引言

很多人一提到 HTTPS,第一反應就是安全,對於普通使用者來說這就足夠了;

但對於程式設計師,很有必要了解下 HTTP 到底有什麼問題?以及HTTPS 是如何解決這些問題的?其背後的解決思路和方法是什麼?

本文只做簡單的描述,力求簡單明瞭的闡明主要內容,因為HTTPS 體系非常複雜,這麼短的文字是無法做到很詳細和精準的分析。想要詳細瞭解HTTPS的方方面面,可以閱讀此前即時通訊網整理的《即時通訊安全篇(七):如果這樣來理解HTTPS,一篇就夠了》一文。

webp

(本文同步釋出於:http://www.52im.net/thread-2027-1-1.html

2、HTTPS相關文章

即時通訊安全篇(七):如果這樣來理解HTTPS,一篇就夠了

一文讀懂Https的安全性原理、數字證照、單項認證、雙項認證等

HTTPS時代已來,打算更新你的HTTP服務了嗎?

蘋果即將強制實施 ATS,你的APP準備好切換到HTTPS了嗎?

3、對HTTPS效能的理解

HTTP 有典型的幾個問題,第一就是效能,HTTP 是基於 TCP 的,所以網路層就不說了(快慢不是 HTTP 的問題)。

比較嚴重的問題在於 HTTP 頭是不能壓縮的,每次要傳遞很大的資料包。另外 HTTP 的請求模型是每個連線只能支援一個請求,所以會顯得很慢。

那麼 HTTPS 是解決這些問題的嗎?

不是,實際上 HTTPS 是在 HTTP 協議上又加了一層,會更慢,相信未來會逐步解決的。同時 HTTPS 用到了很多加密演算法,這些演算法的執行也是會影響速度的。

為什麼說 HTTPS 提升了效能呢?因為只有支援了 HTTPS,才能部署 HTTP/2,而 HTTP/2 協議會提升速度,能夠有效減輕客戶端和伺服器端的壓力,讓響應更快速。有關HTTP/2詳細文章可以看看《從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路》、《腦殘式網路程式設計入門(四):快速理解HTTP/2的伺服器推送(Server Push)》,這裡只要知道一點:HTTP/2 能夠加快速度的主要原因在於多路複用,同一個連線能夠並行傳送和接收多個請求。

webp

4、傳統HTTP的安全性問題

當使用者在瀏覽器輸入一個網址的時候,在位址列上看到小鎖圖示,就會安心,潛意識的認為自己的上網行為是安全的,當然對於小白使用者來說可能還不明白,但是未來會慢慢改善的(萬事開頭難嘛)。

那麼 HTTP 到底有什麼安全問題呢,看幾個例子:

1)由於網際網路傳輸是能夠被攔截的,所以假如你的上網方式被別人控制了(沒有絕對的安全),那麼你的任何行為和資訊攻擊者都會知道,比如我們連上一個匿名的 WIFI,當你上網的時候,輸入的網站密碼可能就已經洩漏了;

2)當我們在上一個網站的時候,莫名其妙跳出一個廣告(這個廣告並不是這個網站的),那是因為訪問的頁面可能被運營商強制修改了(加入了他自己的內容,比如廣告)。

HTTP 最大的問題就在於資料沒有加密,以及通訊雙方沒有辦法進行身份驗證( confidentiality and authentication),由於資料沒有加密,那麼只要資料包被攻擊者劫持,資訊就洩漏了。

身份驗證的意思就是伺服器並不知道連線它的客戶端到底是誰,而客戶端也不確定他連線的伺服器就是他想連線的伺服器,雙方之間沒有辦法進行身份確認。

webp

有關HTTP比較好的文章,可以看看:

網路程式設計懶人入門(七):深入淺出,全面理解HTTP協議

從HTTP/0.9到HTTP/2:一文讀懂HTTP協議的歷史演變和設計思路

腦殘式網路程式設計入門(三):HTTP協議必知必會的一些知識

5、HTTPS 背後的密碼學

為了解決 HTTP 的兩個核心問題,HTTPS 出現了,HTTPS 包含了核心的幾個部分:TLS 協議、OpenSSL,證照。

什麼是 OpenSSL 呢,它實現了世界上非常重要和多的密碼演算法,而密碼學是解決問題最重要的一個環節。

TLS 最重要的是握手的處理方式。證照的體系也很大,但是他們背後都是基於同樣的密碼學。

1)既然 HTTP 沒有資料加密,那麼我們就加密下,對稱加密演算法上場了,這種演算法加密和解密要使用同一個金鑰,通訊雙方需要知道這個金鑰(或者每次協商一個),實際上這種方法不太可能,這涉及到金鑰保密和配送的問題,一旦被攻擊者知道了金鑰,那麼傳輸的資料等同沒有加密。

webp

2)這個時候非對稱加密演算法上場了,公鑰和私鑰是分開的,客戶端儲存公鑰,伺服器儲存私鑰(不會公開),這時候好像能夠完美解決問題了。

但實際上會存在兩個問題,第一就是非對稱加密演算法運算很慢,第二就是會遇到中間人攻擊問題。

先說說中間人攻擊的問題,假如使用非對稱加密演算法,對於客戶端來說它拿到的公鑰可能並不是真正伺服器的公鑰,因為客戶端上網的時候可能不會仔細分辨某個公鑰是和某個公司繫結的,假如錯誤的拿到攻擊者的公鑰,那麼他傳送出去的資料包被劫持後,攻擊者用自己的私鑰就能反解了。

3)接下來如何解決公鑰認證的問題呢?證照出現了,證照是由 CA 機構認證的,客戶端都充分信任它,它能夠證明你拿到的公鑰是特定機構的,然後就能使用非對稱加密演算法加密了。

證照是怎麼加密的呢?實際上也是通過非對稱加密演算法,但是區別在於證照是用私鑰加密,公鑰解密。

CA 機構會用自己的私鑰加密伺服器使用者的公鑰,而客戶端則用 CA 機構的公鑰解出伺服器的公鑰。聽上去有點暈,仔細體會下。這方面的知識,可以詳細閱讀:《即時通訊安全篇(七):如果這樣來理解HTTPS,一篇就夠了》。

4)上面說了非對稱加密演算法加密解密非常耗時,對於 HTTP 這樣的大資料包,速度就更慢了,這時候可以使用對稱加密演算法,這個金鑰是由客戶端和伺服器端協商出來,並由伺服器的公鑰進行加密傳遞,所以不存在安全問題。

5)另外客戶端拿到證照後會驗證證照是否正確,它驗證的手段就是通過 Hash 摘要演算法,CA 機構會將證照資訊通過 Hash 演算法運算後再用私鑰加密,客戶端用 CA 的公鑰解出後,再計算證照的 Hash 摘要值,兩者一致就說明驗證身份通過。

6)HTTPS 解決的第三個問題是完整性問題,就是資訊有沒有被篡改(資訊能夠被反解),用的是 HMAC 演算法,這個演算法和 Hash 方法差不多,但是需要傳遞一個金鑰,這個金鑰就是客戶端和伺服器端上面協商出來的。

附錄:更多安全方面的文章

即時通訊安全篇(一):正確地理解和使用Android端加密演算法

即時通訊安全篇(二):探討組合加密演算法在IM中的應用

即時通訊安全篇(三):常用加解密演算法與通訊安全講解

即時通訊安全篇(四):例項分析Android中金鑰硬編碼的風險

即時通訊安全篇(五):對稱加密技術在Android平臺上的應用實踐

即時通訊安全篇(六):非對稱加密技術的原理與應用實踐

傳輸層安全協議SSL/TLS的Java平臺實現簡介和Demo演示

理論聯絡實際:一套典型的IM通訊協議設計詳解(含安全層設計)

微信新一代通訊安全解決方案:基於TLS1.3的MMTLS詳解

來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享

簡述實時音視訊聊天中端到端加密(E2EE)的工作原理

移動端安全通訊的利器——端到端加密(E2EE)技術詳解

Web端即時通訊安全:跨站點WebSocket劫持漏洞詳解(含示例程式碼)

通俗易懂:一篇掌握即時通訊的訊息傳輸安全原理

IM開發基礎知識補課(四):正確理解HTTP短連線中的Cookie、Session和Token

快速讀懂量子通訊、量子加密技術

即時通訊安全篇(七):如果這樣來理解HTTPS原理,一篇就夠了

一分鐘理解 HTTPS 到底解決了什麼問題

>> 更多同類文章 ……

(本文同步釋出於:http://www.52im.net/thread-2027-1-1.html


相關文章