本文目標
讀完本文,能夠明白
- 什麼是HTTPS、TLS(SSL),TLS和HTTPS的關係
- 什麼是數字證書及認證過程
- 摘要、數字簽名
- 對稱、非對稱加密演算法
HTTPS概述
HTTPS,也稱作HTTP over TLS。就是在安全的傳輸層上傳送的HTTP。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密資料包。HTTPS開發的主要目的,是提供對網站伺服器的身份認證,保護交換資料的隱私與完整性。
HTTPS方案
安全的HTTP是可選的。因此,對於Web伺服器發起請求時,我們需要有一種方式來告知Web伺服器去執行HTTP的安全協議版本。這是在URL的方案中實現的。
請求一個客戶端對某個Web資源執行某事務,它會去檢查URL的方案。
- 如果URL的方案是HTTP,客戶端就會開啟一條到伺服器埠80(預設)的連線,併傳送老的HTTP指令。
- 如果URL方案是HTTPS,客戶端就會開啟一條到伺服器埠443(預設)的連線,然後與伺服器握手,以二進位制格式與伺服器交換一些SSL安全引數,附上加密的HTTP命令。
安全傳輸過程
在HTTPS中,客戶端首先會開啟一條到Web伺服器埠443的連線。一旦建立TCP連線,客戶端和伺服器就會初始化SSL層,對加密引數進行溝通,並交換金鑰。握手完成後,SSL初始化就完成了,客戶端就可以把請求報文傳送給安全層了。在將這些報文傳送給TCP之前,要先對其加密。
SSL握手過程
在傳送已加密的HTTP報文之前,客戶端和伺服器需要進行一次SSL握手,在這個握手的過程中,主要完成以下工作:
- 交換協議版本號
- 選擇一個兩端都瞭解的加密方式
- 對兩端身份進行認證
- 生成臨時的會話金鑰,以便加密通道
- [明文] 客戶端傳送隨機數client_random和支援的加密方式列表
- [明文] 伺服器返回隨機數server_random ,選擇的加密方式和伺服器證書鏈
- [RSA] 客戶端驗證伺服器證書,使用證書中的公鑰加密premaster secret 傳送給服務端
- 服務端使用私鑰解密premaster secret
- 兩端分別通過client_random,server_random 和premaster secret 生成master secret,用於對稱加密後續通訊內容
數字證書
在訪問HTTPS的網站中會看到位址列左側會有綠色的小鎖頭,點選開啟可以看到這其實是網站的數字證書。
什麼是數字證書
數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的。以數字證書為核心的加密技術(加密傳輸、數字簽名、數字信封等安全技術)可以對網路上傳輸的資訊進行加密和解密、數字簽名和簽名驗證,確保網上傳遞資訊的機密性、完整性及交易的不可抵賴性。使用了數字證書,即使您傳送的資訊在網上被他人截獲,甚至您丟失了個人的賬戶、密碼等資訊,仍可以保證您的賬戶、資金安全。(百度百科)
為什麼需要數字證書
網際網路有太多的服務需要使用證書來驗證身份,以至於客戶端(作業系統或瀏覽器等)無法內建所有證書,需要通過服務端將證書傳送給客戶端。
客戶端為什麼需要驗證數字證書
通過中間人攻擊將請求攔截偽造證書等手段來欺騙客戶端,存在安全風險。
如何驗證數字證書的合法性
需要通過數字簽名來驗證數字證書等合法性。
數字簽名
證書是一個站點的身份證,但是身份證也可以被偽造,為了保證這個證書是真的我們需要數字簽名。我們會將證書內容用簽名演算法生成一個值,我們稱之為“摘要”。然後將該摘要用主機的私鑰加密,加密後的內容就是我們的數字簽名。
當客戶端收到附帶數字簽名的數字證書時,會通過數字證書中的證書籤名演算法將該證書生成一個摘要,在用伺服器眾所周知的公鑰解密數字簽名,看得到的摘要是否相同,相同那就說明證書是真的。
如果公鑰解密後得到的摘要與生成的摘要不符那麼可能有兩種情況
- 傳送方身份不是目的主機
- 目的主機傳送的證書被篡改
對稱和非對稱加密演算法
對稱加密又稱私鑰加密,是一種混淆演算法,能夠在非安全通道上進行安全通訊。
非對稱加密又稱公鑰加密,它是另一種方法,使用兩個金鑰,而不是一個;其中一個金鑰是私密的,另一個是公開的。顧名思義,一個金鑰用於私人,另一個金鑰會被所有人共享。這個兩個金鑰之間存在一些特殊的數學關係。RSA是目前普遍部署的非對稱加密演算法。