1 介紹
隨著 HTTPS 的不斷普及和使用成本的下降,現階段大部分的系統都已經開始用上 HTTPS 協議。 HTTPS 與 HTTP 相比, 主打的就是安全概念,相關的知識如 SSL 、非對稱加密、 CA證書、資料完整性保護 等,我們多多少少也都有聽過。 本文重點從原理上講解 HTTPS 的安全性,以及同HTTP的比較說明。
2 HTTP和HTTPS的比較
HTTP(全稱:HyperText Transfer Protocol,超文字傳輸協議)和HTTPS(全稱: Hypertext Transfer Protocol Secure,超文字傳輸安全協議)都是網際網路中用於資料傳輸的協議,它們在多個方面有著顯著的差異和特點。
2.1 HTTP
HTTP(Hypertext Transfer Protocol),是一種傳送和接收HTML頁面的方法,主要用於Web瀏覽器和網站伺服器之間傳遞資訊。它的主要特點如下:
1. 基於請求響應模式: HTTP協議採用客戶端-伺服器架構模式,客戶端向伺服器傳送請求,伺服器返回相應的響應。這種模式能有效分離應用邏輯,提高系統的可維護性和擴充套件性。
2. 基於文字傳輸: HTTP協議使用ASCII碼作為通訊協議,每個請求和響應都是一條文字訊息,這使得通訊協議更加簡單、直觀、易於處理。
3. 支援多媒體傳輸: HTTP協議可以傳輸多種型別的資料,如HTML、XML、JSON、圖片、音訊、影片等,這使得HTTP協議成為一種通用的網路傳輸協議,適用於各種不同型別的應用場景。
4. 無連線: HTTP協議是一個無連線協議,每個請求都是獨立的,伺服器處理請求後立即關閉連線。這有助於節省資源,但也帶來了一些缺點,如需要重新建立連線、重複傳送相同的頭部資訊等。
5. 無狀態: HTTP協議沒有客戶端的狀態儲存,也沒有事務處理的“記憶體”能力。這意味著每次訪問網站時可能需要重複的登入操作。
然而,HTTP協議也存在一些不足之處。由於它以明文方式傳送內容,不提供任何方式的資料加密,因此安全性較差。如果攻擊者擷取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的資訊。因此,HTTP協議不適合傳輸一些敏感資訊,比如信用卡號、密碼等支付資訊。
2.2 HTTPS
與HTTP相比,HTTPS(Hypertext Transfer Protocol Secure)則是以安全為目標的HTTP通道。它在HTTP的基礎上透過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS的內容加密、身份驗證以及資料完整性保護的原理主要依賴於SSL/TLS協議。下面我們詳細來看看這幾方面的實現原理。
2.2.1 內容加密
HTTPS使用對稱加密和非對稱加密相結合的方式來實現內容加密。
1. 對稱加密:在金鑰交換完成後,客戶端和伺服器會生成一個共享的會話金鑰。這個會話金鑰用於後續的加密和解密操作。雙方使用這個會話金鑰,透過對稱加密演算法(如AES)對傳輸的資料進行加密和解密,確保資料在傳輸過程中的安全性。
如上圖,對稱加密雖然保證了訊息的保密性,但是因Client和Service共享一個密匙,這樣就導致密匙特別容易洩露。
2. 非對稱加密:在HTTPS的握手階段,伺服器會將其公鑰傳送給客戶端。這個公鑰用於後續的加密通訊。客戶端使用伺服器的公鑰加密一個隨機數,然後將加密後的隨機數傳送給伺服器。伺服器使用其私鑰解密這個隨機數,從而確保雙方都能安全地交換金鑰,這個過程稱為金鑰交換。
如上圖,
- 非對稱加密時需要使用到接收方的公匙對訊息進行加密,但是公匙不保密,可以截獲客戶端發來的訊息,然後篡改形成攻擊
- 非對稱加密的效能會慢上至少幾倍,增加系統消耗。因此,Https將兩種加密結合起來使用。
2.2.2 身份驗證
HTTPS使用數字證書來驗證伺服器的身份。
1. 數字證書:數字證書是由權威的證書頒發機構(CA)頒發的,包含了伺服器的公鑰、伺服器的身份資訊以及CA的簽名等資訊。當客戶端與伺服器建立HTTPS連線時,伺服器會將其數字證書傳送給客戶端。
2. 驗證過程:客戶端收到伺服器的數字證書後,會驗證證書的合法性。首先,客戶端會檢查證書是否由受信任的CA頒發。然後,客戶端會檢查證書是否過期以及證書中的伺服器身份資訊是否與正在連線的伺服器一致。最後,客戶端會使用CA的公鑰驗證證書上的簽名,確保證書在傳輸過程中沒有被篡改。如果證書驗證透過,客戶端就可以確認伺服器的身份是可信的。
2.2.3 資料完整性
HTTPS透過訊息認證碼(MAC)來確保資料的完整性。
1. 訊息認證碼:在HTTPS通訊過程中,每個傳輸的資料包都會附帶一個MAC值。這個MAC值是透過將資料包的內容和會話金鑰一起輸入到一個雜湊函式中計算得出的。因此,只有持有相同會話金鑰的接收方才能計算出正確的MAC值。
2. 完整性校驗:當接收方收到資料包時,它會使用相同的會話金鑰和雜湊函式計算MAC值,並與資料包中附帶的MAC值進行比較。如果兩個MAC值相同,那麼接收方就可以確認資料包在傳輸過程中沒有被篡改,從而保證了資料的完整性和安全性。
2.2.4 埠
HTTP 預設使用 80 埠,而 HTTPS 預設使用 443 埠。
2.2.5 效能
因為HTTPS 需要進行加密和解密操作,因此它的效能可能略低於 HTTP。但隨著技術的發展,這種效能差距已經接近可以忽略。
3 總結
HTTP和HTTPS在差異方面,最顯著的是安全性。HTTP是明文傳輸協議,而HTTPS是加密傳輸協議。這種加密特性使得HTTPS在傳輸敏感資訊時更具優勢。此外,瀏覽器地址展示方式也有所不同,Https有綠色安全鎖標誌,而http則有網站不安全標誌提醒。在協議層面,HTTPS在HTTP的基礎上加入了SSL安全認證證書,從而提供了更高階別的安全防護。在涉及敏感資訊傳輸的場景中,如線上購物、銀行業務等,基本都是用HTTPS協議進行資料傳輸。