????????HTTPS(HyperText Transfer Protocol Secure,超文本傳輸安全協議)是HTTP協議的安全版本。它在HTTP的基礎上加入了SSL/TLS協議,用于對數據進行加密,并確保數據傳輸過程中的機密性、完整性和身份驗證。
在HTTPS出現之前,HTTP協議以明文形式傳輸數據。這意味著:
數據可以被竊聽(機密性缺失):
任何在數據傳輸路徑上的人(如你的ISP、咖啡館的Wi-Fi管理員、網絡攻擊者)都可以截獲并查看你發送和接收的數據,包括登錄密碼、信用卡信息、聊天內容等。
數據可以被篡改(完整性缺失):
中間人可以修改傳輸中的數據。例如,將你訪問的合法銀行網站鏈接替換成釣魚網站,或者在網頁內容中注入惡意代碼。
身份可能被冒充(身份驗證缺失):
你無法確定你正在訪問的網站是否是真正的目標網站,可能是一個偽造的“釣魚”網站。
HTTPS就是為了解決這些問題而設計的。
HTTPS加密是如何工作的?(核心機制:SSL/TLS握手)
????????HTTPS的核心在于SSL(Secure Sockets Layer,安全套接層)及其繼任者TLS(Transport Layer Security,傳輸層安全)協議。
????????一個典型的HTTPS通信過程分為兩個階段:
階段一:SSL/TLS握手(建立安全連接)
這是最關鍵的部分,雙方協商加密方式并驗證身份。過程大致如下:
客戶端發起請求(Client Hello):
瀏覽器(客戶端)向服務器發送一個“Client Hello”消息。
消息中包含:客戶端支持的TLS版本、客戶端支持的密碼套件(加密算法組合,如RSA、AES、SHA等)、一個隨機數(ClientRandom)。
服務器響應(Server Hello):
服務器收到請求后,選擇一個雙方都支持的TLS版本和密碼套件。
服務器發送“Server Hello”消息,包含:選定的TLS版本、選定的密碼套件、服務器生成的隨機數(ServerRandom)。
服務器發送證書(Server Certificate):
服務器將其數字證書發送給客戶端。這個證書由受信任的**證書頒發機構(CA)**簽發,包含了服務器的公鑰、域名、有效期等信息,并附有CA的簽名。
(可選)服務器密鑰交換(Server Key Exchange): 某些加密套件可能需要服務器發送額外的密鑰交換參數。
服務器發送結束(Server Hello Done):
服務器通知客戶端,服務器部分的初始信息發送完畢。
客戶端驗證證書并生成預主密鑰(Pre-Master Secret):
驗證證書: 客戶端檢查證書是否由受信任的CA簽發、是否過期、域名是否匹配當前訪問的網站。如果驗證失敗,瀏覽器通常會警告用戶。
生成預主密鑰: 客戶端生成一個隨機數,稱為預主密鑰(Pre-Master Secret)。
加密并發送預主密鑰: 客戶端使用從證書中獲取的服務器公鑰,將預主密鑰加密后發送給服務器。由于只有服務器的私鑰才能解密,這就保證了預主密鑰的傳輸是安全的。
客戶端發送結束(Client Key Exchange):
客戶端發送一個“Client Key Exchange”消息,內容就是剛才加密發送的預主密鑰(加密形式)。
客戶端還可能發送其他消息,如證書請求(如果需要客戶端認證)、擴展消息等。
服務器解密預主密鑰:
服務器使用自己的私鑰解密收到的預主密鑰。
雙方計算主密鑰(Master Secret):
關鍵步驟! 客戶端和服務器現在都擁有了三個隨機數:ClientRandom、ServerRandom和Pre-Master Secret。
雙方使用預先商定的密鑰派生函數(如偽隨機函數PRF),將這些隨機數作為輸入,計算出相同的主密鑰(Master Secret)。這個主密鑰是后續加密通信的基礎。
客戶端發送完成消息(Change Cipher Spec):
客戶端通知服務器,后續所有的通信都將使用協商好的加密算法和主密鑰進行加密。
客戶端發送 Finished 消息:
客戶端發送一個加密的“Finished”消息,這個消息是之前所有握手消息的哈希值(用主密鑰加密)。服務器可以解密并驗證這個哈希值,以確認握手過程沒有被篡改,并且客戶端確實擁有主密鑰。
服務器發送完成消息(Change Cipher Spec):
服務器通知客戶端,后續所有的通信都將使用協商好的加密算法和主密鑰進行加密。
服務器發送 Finished 消息:
服務器發送一個加密的“Finished”消息,內容是之前所有服務器端握手消息的哈希值(用主密鑰加密)。客戶端可以解密并驗證這個哈希值。
一旦雙方都成功驗證了對方的Finished消息,握手階段就結束了。 此時,一個安全的通信通道已經建立。
階段二:加密數據傳輸
握手完成后,客戶端和服務器使用在握手階段協商好的對稱加密算法和主密鑰(或從主密鑰派生出的會話密鑰)來加密和解密所有傳輸的數據(如HTML頁面、圖片、表單提交等)。對稱加密因為加解密速度快,適合大量數據的傳輸。
HTTPS加密的關鍵技術點:
非對稱加密(公鑰加密):
用于SSL/TLS握手階段,安全地交換對稱密鑰(主密鑰)。客戶端用服務器的公鑰加密數據,只有服務器用私鑰才能解密。
對稱加密(私鑰加密):
用于加密實際傳輸的大量數據。加解密速度快,但密鑰分發是個問題(這就是為什么需要非對稱加密來交換對稱密鑰)。
哈希函數(消息摘要):
用于生成數據的固定長度摘要(指紋)。即使數據有微小變化,摘要也會完全不同。在握手過程中用于驗證消息的完整性(Finished消息)。
數字證書:
由可信的第三方(CA)頒發,綁定服務器的公鑰和身份信息(域名)。客戶端通過驗證證書來確認服務器的身份,防止中間人攻擊。
證書頒發機構(CA):
操作系統、瀏覽器等預裝了眾多CA的根證書。客戶端通過信任這些根證書來驗證網站證書的合法性。
HTTPS的優勢總結:
數據保密性: 加密傳輸,防止竊聽。
數據完整性: 通過哈希校驗,防止數據被篡改。
身份認證: 通過證書驗證,確認網站的真實身份,防止釣魚。
提升搜索引擎排名: Google等搜索引擎優先推薦使用HTTPS的網站。
增強用戶信任: 瀏覽器地址欄顯示安全鎖標志,讓用戶更放心。
HTTPS的挑戰:
性能開銷: 加密/解密需要計算資源,相比HTTP稍慢(但現代硬件和優化算法已大大緩解)。
證書成本和管理: 獲取、部署、更新和管理證書需要成本和操作(雖然現在有許多免費證書方案如Let’s Encrypt)。
配置復雜性: 服務器需要正確配置SSL/TLS。
總結:
???????
?????????HTTPS通過結合非對稱加密、對稱加密、哈希函數和數字證書等技術,在HTTP的基礎上構建了一個安全的通信層。它通過復雜的SSL/TLS握手過程建立安全的通道,然后使用高效的對稱加密傳輸數據,從而有效保護了用戶與網站之間的通信安全,是現代互聯網不可或缺的基礎設施。