HTTPS
我們都知道 HTTPS 傳輸安全,為什麼安全呢?密碼學保證?下面介紹一些 HTTPS 用到的技術。
SSL/TLS
SSL(Secure Sockets Layer),中文叫安全套接層,是網景公司 90 年代中期設計來解決 HTTP 協議明文傳輸的缺點(嗅探、劫持、篡改)。
到 1999 年,IETF 把 SSL 標準化,標準化之後名稱改為 TLS(Transport Layer Security),中文叫傳輸層安全協議。
HTTPS
什麼是 HTTPS?
HTTPS = HTTP + SSL/TLS。
即不安全的 HTTP 協議加上 SSL/TLS 等於安全的 HTTPS。
加密解密
加密和解密是一對互逆的數學運算:
加密:明文 + 金鑰 = 密文
解密:密文 + 金鑰 = 明文
對稱加密
對稱加密的意思就是加密和解密使用相同的金鑰,例如在壓縮檔案上設定密碼,解密就需要輸入相同的密碼。
非對稱加密
非對稱加密則使用不同的金鑰(公鑰和私鑰)進行加密解密。
金鑰交換
網站和瀏覽器之間要實現安全的金鑰交換該如何實現?
方案一:使用對稱加密演算法
如果單純使用物件加密演算法,瀏覽器和網站之間必須要交換金鑰,金鑰直接用明文傳輸很容易被竊取,無法保證金鑰的安全性。
方案二:使用非對稱加密演算法
- 網站基於非對稱加密演算法隨機生成一對金鑰對 x,y,目前還很安全,只有網站知道
- 網站把 x 留在手裡,把 y 用明文傳輸到瀏覽器(y 有可能被竊取)
- 瀏覽器拿到 y 之後,先隨機生成第三個對稱加密的金鑰 z,然後用 y 加密 z 得到最新的 f(本質上就是用非對稱加密保證對稱加密的安全性),將 f 傳送到網站(因為 x,y 是成對的,只有 x 才能解密 y 加密的結果,所有 y 洩露也無法解密 k)
- 網站拿到 f 之後,用 x 解密得到 z,至此瀏覽器和網站都有對稱加密的金鑰 z,可以進行通訊加密
思考一下,方案二是否安全和完美?
依舊不安全,方案二可以在一定程度上防止嗅探,但無法防範網路資料篡改(中間人攻擊)。
在網站和瀏覽器交換金鑰的過程中,中間人接收網站傳送的金鑰 y 儲存下來,改用自己生成的金鑰對偽造成網站與瀏覽器互動,同時使用金鑰 y 偽造成瀏覽器與網站互動。
方案二不安全的根源是缺乏可靠的身份認證,瀏覽器無法鑑別自己收到的金鑰是不是來自網站。
因此需要引入 CA 證書機制(身份認證),基於 CA 證書進行金鑰交換(具體 CA 機制可檢視另一篇介紹 CA 的文章)。
此時得到方案三:
- 網站首先花錢從權威 CA 機構那裡購買一個數字證書,證書通常包含一個私鑰和一個公鑰證書檔案
- 瀏覽器訪問網站時將公鑰證書檔案傳送給瀏覽器
- 瀏覽器驗證收到的證書(權威機構擔保真假,主流瀏覽器和作業系統都會內建權威 CA 機構的根證書)
- 如果證書可信,就隨機生成一個對稱加密金鑰 k,使用公鑰加密 k,得到金鑰 c
- 將金鑰 c 傳送到網站,網站根據私鑰解密出金鑰 k,至此金鑰交換完成
這就是 HTTPS 加密傳輸的過程。