1. 程式人生 > >也許,這樣理解HTTPS更容易

也許,這樣理解HTTPS更容易

摘要:本文嘗試一步步還原HTTPS的設計過程,以理解為什麼HTTPS最終會是這副模樣。但是這並不代表HTTPS的真實設計過程。在閱讀本文時,你可以嘗試放下已有的對HTTPS的理解,這樣更利於“還原”過程。

我們先不了聊HTTP,HTTPS,我們先從一個聊天軟體說起,我們要實現A能發一個hello訊息給B:

112017-2-20-292372-b93c4670333eb8d9

如果我們要實現這個聊天軟體,本文只考慮安全性問題,要實現

A發給B的hello訊息包,即使被中間人攔截到了,也無法得知訊息的內容

如何做到真正的安全?

這個問題,很多人馬上就想到了各種加密演算法,什麼對稱加密、非對稱加密、DES、RSA、XX、噼裡啪啦~

而我想說,加密演算法只是解決方案,我們首先要做的是理解我們的問題域

——什麼是安全?

我個人的理解是:

A與B通訊的內容,有且只有A和B有能力看到通訊的真正內容

好,問題域已經定義好了(現實中當然不止這一種定義)。對於解決方案,很容易就想到了對訊息進行加密。

題外話,但是隻有這一種方法嗎?我看未必,說不定在將來會出現一種物質打破當前世界的通訊假設,實現真正意義上的保密。

對於A與B這樣的簡單通訊模型,我們很容易做出選擇:

122017-2-20-292372-9d943956300560f2

這就是對稱加密演算法,其中圖中的金鑰S同時扮演加密和解密的角色。具體細節不是本文範疇。

只要這個金鑰S不公開給第三者,同時金鑰S足夠安全,我們就解決了我們一開始所定問題域了。因為世界上有且只有A與B知道如何加密和解密他們之間的訊息。

但是,在WWW環境下,我們的Web伺服器的通訊模型沒有這麼簡單:

132017-2-20-292372-528782117a69a5dc

如果伺服器端對所有的客戶端通訊都使用同樣的對稱加密演算法,無異於沒有加密。那怎麼辦呢?即能使用對稱加密演算法,又不公開金鑰?請讀者思考21秒鐘。