一、回顧一下Http通訊過程
1.單向認證
2.雙向認證
一、SSL/TLS協議詳解
二、 加密技術
三、數字簽名和摘要的原理
四、數字證書與認證
一、回顧一下Http通訊過程
「1️⃣ 單向認證」
以下是HTTPS的單向認證過程。在單向認證中,客戶端驗證伺服器的身份,但伺服器並不驗證客戶端的身份。這是最常見的HTTPS通訊方式,適用於大多數網頁瀏覽和網際網路服務。
單向認證流程中,伺服器端儲存著公鑰證書和私鑰兩個檔案,整個握手過程如下:
-
「客戶端發起HTTPS請求:」 使用者在瀏覽器或其他客戶端中輸入一個HTTPS網址,然後客戶端連線到伺服器的443埠(HTTPS的預設埠)。
-
「伺服器響應併發送證書:」 伺服器響應客戶端的請求,併發送其SSL/TLS數字證書給客戶端。這個證書包含了伺服器的公鑰、證書頒發機構(CA)資訊、伺服器身份資訊以及證書的簽名等資訊。
-
「客戶端驗證伺服器證書:」 客戶端接收到伺服器的證書後,會驗證證書的合法性。這包括檢查證書的頒發機構是否可信、證書是否在有效期內、以及證書的簽名是否有效等。如果證書驗證失敗,客戶端會發出警告或中斷連線。
-
「金鑰交換與生成:」 如果伺服器證書驗證透過,客戶端會生成一個隨機的預主金鑰(pre-master secret),並使用伺服器的公鑰進行加密後傳送給伺服器。伺服器使用自己的私鑰解密得到預主金鑰。然後,客戶端和伺服器都基於這個預主金鑰和一些其他引數,生成一個會話金鑰(session key)。這個會話金鑰將用於後續的資料加密和解密。
-
「建立安全連線:」 客戶端和伺服器使用協商出的會話金鑰對傳輸的資料進行加密,確保資料在傳輸過程中的安全。此後,客戶端和伺服器之間的所有通訊都會使用這個會話金鑰進行加密。
-
「數據傳輸:」 在安全連線建立後,客戶端和伺服器就可以開始傳輸資料了。所有的資料在傳輸前都會被加密,接收方在收到資料後會使用會話金鑰進行解密,以獲取原始資料。
-
「連線關閉:」 當數據傳輸完成後,客戶端和伺服器會關閉連線。如果需要再次通訊,它們會重新進行上述的握手和金鑰交換過程。
透過上述過程,HTTPS確保了資料在傳輸過程中的機密性、完整性和身份真實性,從而為使用者提供了更安全、更可靠的網際網路通訊體驗。
「2️⃣ 雙向認證」
雙向認證(又稱為雙向SSL認證或雙向TLS認證)是一個更嚴格的安全過程,其中不僅客戶端驗證伺服器的身份,伺服器也驗證客戶端的身份。這通常用於需要更高安全級別的應用,如銀行交易或企業內部的敏感數據傳輸。
在雙向認證中,除了單向認證的所有步驟外,還會增加以下步驟:
-
客戶端在傳送HTTPS請求時,也會將自己的數字證書傳送給伺服器。 -
伺服器驗證客戶端證書的合法性。如果客戶端證書驗證失敗,伺服器可以拒絕連線。 -
如果客戶端證書驗證透過,伺服器和客戶端繼續進行金鑰交換和建立安全連線的過程。
由於雙向認證增加了額外的安全層,它提供了更高階別的安全保障,但同時也增加了配置的複雜性和成本。因此,它通常只在需要最嚴格安全保障的場景中使用。
一、SSL/TLS協議詳解
HTTPS(全稱:Hypertext Transfer Protocol Secure),是以安全為目標的HTTP通道,在HTTP的基礎上透過傳輸加密和身份認證保證了傳輸過程的安全性。HTTPS在HTTP的基礎下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
SSL(Secure Sockets Layer)及其後續版本TLS(Transport Layer Security)是HTTPS的核心。它們是一個安全協議,用於在兩個通訊應用程式之間提供隱私和資料完整性。
「1. 握手過程:」這是SSL/TLS協議中最為關鍵的部分。當客戶端(如瀏覽器)嘗試與伺服器建立安全連線時,它們會經歷一個握手過程。這個過程中,客戶端和伺服器會協商使用哪種加密套件、交換金鑰、驗證伺服器的身份等。
-
客戶端傳送支援的加密套件列表給伺服器。 -
伺服器選擇其中一個加密套件,併發送其數字證書給客戶端。 -
客戶端驗證伺服器的數字證書。如果證書有效,客戶端會生成一個隨機的預主金鑰(pre-master secret),並使用伺服器的公鑰加密後傳送給伺服器。 -
伺服器和客戶端都使用這個預主金鑰,結合一些其他引數,生成一個會話金鑰(session key)。這個會話金鑰將用於後續的資料加密。
「2. 資料加密:」一旦握手過程完成,客戶端和伺服器就會使用協商出的會話金鑰對傳輸的資料進行加密。這確保了即使資料被截獲,攻擊者也無法讀取其內容。
「3. 資料完整性:」除了加密,SSL/TLS還提供了資料完整性保護。透過使用訊息認證碼(MAC),可以確保資料在傳輸過程中沒有被篡改。
二、 加密技術
HTTPS通訊既使用了對稱加密,也使用了非對稱加密,二者在HTTPS通訊過程中各自扮演了不同的角色。
「1. 非對稱加密:」
-
用途:主要用於金鑰交換和數字證書。非對稱加密涉及公鑰和私鑰兩個金鑰,公鑰用於加密資料,私鑰用於解密資料。由於私鑰不公開,因此非對稱加密具有很高的安全性。 -
過程:在HTTPS握手階段,伺服器將其公鑰(包含在數字證書中)傳送給客戶端。客戶端驗證數字證書的有效性後,使用伺服器的公鑰加密一個隨機生成的對稱金鑰(會話金鑰),然後傳送給伺服器。伺服器使用其私鑰解密得到會話金鑰。
「2. 對稱加密:」
-
用途:主要用於實際數據傳輸的加密。對稱加密使用相同的金鑰進行加密和解密,加密速度快,適合大量資料的加密。 -
過程:在客戶端和伺服器透過非對稱加密協商好會話金鑰後,雙方使用該會話金鑰對傳輸的資料進行對稱加密。加密後的資料在傳輸過程中即使被截獲,攻擊者也無法解密,保證了資料的安全性。
三、數字簽名和摘要的原理
在HTTPS通訊流程中,數字簽名和摘要都是確保資料完整性和安全性的重要機制:
「1. 數字簽名原理」
-
簽名生成:傳送方(在HTTPS中通常是伺服器)使用自己的私鑰對資料的摘要進行加密,生成數字簽名。摘要是透過Hash函式從原始資料中計算出來的固定長度的字串,它代表了資料的唯一特徵。
-
簽名驗證:接收方(在HTTPS中通常是客戶端)收到資料和數字簽名後,使用傳送方的公鑰對簽名進行解密,得到摘要A。同時,接收方也使用相同的Hash函式對接收到的資料進行計算,得到摘要B。
-
比較摘要:接收方將摘要A與摘要B進行比較。如果兩者相同,說明資料在傳輸過程中沒有被篡改,因為任何對資料的微小改動都會導致Hash值發生顯著變化。這樣,數字簽名就驗證了資料的完整性和來源。
「2. 摘要原理」
-
摘要生成:摘要是透過Hash函式對原始資料進行計算得到的。Hash函式是一種單向函式,它將任意長度的資料對映為固定長度的字串(即摘要)。這個過程是不可逆的,即不能從摘要反推出原始資料。
-
資料完整性校驗:由於Hash函式的特性,即使原始資料發生微小的變化,生成的摘要也會完全不同。因此,透過比較傳送方和接收方計算的摘要是否一致,可以判斷資料是否在傳輸過程中被篡改。
在HTTPS中,數字簽名和摘要通常一起使用,以提供更強的安全保障。伺服器在傳送資料前會先計算資料的摘要,並對摘要進行簽名。客戶端收到資料後,會驗證簽名並重新計算摘要,以確保資料的完整性和來源。這樣,即使攻擊者截獲並篡改了資料,也無法偽造有效的數字簽名或透過摘要校驗,從而保證了HTTPS通訊的安全性。
「3. HTTPS通訊中的兩個關鍵加密步驟:金鑰交換和資料加密」
-
金鑰交換:這個過程通常使用非對稱加密。伺服器將其公鑰(包含在數字證書中)傳送給客戶端,客戶端驗證證書後生成一個隨機的對稱金鑰(會話金鑰),並使用伺服器的公鑰加密這個會話金鑰,然後傳送給伺服器。伺服器使用其私鑰解密得到會話金鑰。這一步確保了會話金鑰的安全交換。
-
資料加密:一旦客戶端和伺服器協商好了會話金鑰,雙方就會使用這個對稱金鑰對傳輸的資料進行加密和解密。這裏的資料指的是原文,也就是客戶端和伺服器之間要傳輸的實際內容。對稱加密確保了資料在傳輸過程中的機密性,即使資料被截獲,攻擊者也無法解密得到原文。
至於摘要,它在HTTPS中主要用於資料完整性的校驗,而不是直接用於加密。客戶端和伺服器在傳輸資料前,都會先對資料計算摘要(使用Hash函式),然後在收到資料後再計算一次摘要,並與傳送方的摘要進行比較,以確認資料在傳輸過程中是否被篡改。
因此,HTTPS中加密的主要內容是原文,而摘要則用於資料完整性的校驗。
四、數字證書與認證
數字證書是HTTPS安全機制中的另一個關鍵元件。它是由權威的證書頒發機構(CA)簽發的,包含了持有者的公鑰、持有者的身份資訊和CA的簽名。
-
證書的作用:數字證書的主要目的是驗證伺服器的身份。當客戶端連線到伺服器時,伺服器會發送其數字證書給客戶端。客戶端可以使用預置的CA證書來驗證伺服器的證書是否有效。 -
證書鏈:爲了驗證伺服器的證書,客戶端可能需要驗證整個證書鏈。證書鏈從伺服器的證書開始,一直追溯到根CA證書。每個證書都由其上級CA簽名,從而形成一個信任鏈。 -
證書吊銷:如果伺服器的私鑰洩露或證書不再需要,CA可以吊銷該證書。客戶端在驗證伺服器證書時,也會檢查它是否被吊銷。這通常透過查詢證書吊銷列表(CRL)或使用線上證書狀態協議(OCSP)來完成。