HTTS協議實際就是標準的HTTP協議加上SSL/TLS層.它能防止我們的信息被竊取,暴露出不安全.或者進入釣魚網址.通過下面這個講解,我希望能明白SSL/TLS層到底為我們做了哪些事情,才能保證我們的信息安全.
1. HTTPS到底做了哪些事情
HTTPS采用眾所周知和理解的HTTP協議,并簡單地將SSL / TLS加密層層疊在其上。服務器和客戶端仍然使用相同的HTTP,但通過安全的SSL連接來加密和解密他們的請求和響應。 SSL層有兩個主要目的:
- 保證你是在跟真正的服務器通信,而不是偽裝的服務器.
- 保證只有真正的服務器才能解密你發送的信息.同時,也只有你才能解密服務器跟你發送消息.就是保證是你跟真正的服務器在通信,這過程中沒有第三者.
在這過程中,其他人還是可以中途截取到你發送的信息,但是是加密的,它們拿到也無法解密.
2. SSL/TLS是如何建立連接的
客戶端和服務器端通過握手來建立連接的,目的有以下3點。
- 保證客戶端正在和正確的服務器通信(反之亦然)
- 有關各方已就“密碼套件”達成一致,該密碼套件包括將用于交換數據的加密算法
- 對密匙達成一致,雙方使用相同的密匙
一旦建立連接,雙方就可以使用商定的算法和密鑰將消息安全地發送給對方。我們將握手分為三個主要階段 - Hello,證書交換和密鑰交換。
- Hello - 握手從客戶端發送ClientHello消息開始。這包含服務器通過SSL/TLS連接到客戶端所需的所有信息,包括它支持的各種密碼套件和最大SSL/TLS版本。服務器響應ServerHello,其中包含客戶端所需的類似信息,包括基于客戶端有關哪個密碼套件和SSL/TLS版本將被使用的偏好的決定。
- 證書交換 - 現在聯系已建立,服務器必須向客戶證明其身份。這是通過使用SSL證書來實現的,該證書與其護照非常相似。 SSL證書包含各種數據,包括所有者的名稱,所連接的屬性(例如域),證書的公鑰,數字簽名以及有關證書有效日期的信息??蛻舳藱z查它是隱式信任證書,還是驗證它是否被其隱含信任的幾個證書頒發機構(CA)之一驗證和信任。請注意,服務器也可以要求證書來證明客戶的身份,但這通常只發生在非常敏感的應用程序中。
- 密鑰交換 - 客戶端和服務器交換的實際消息數據的加密將使用對稱加密算法完成,其確切性質在Hello階段已經達成一致。對稱算法使用單個密鑰進行加密和解密,與需要公鑰/私鑰對的非對稱算法相反。雙方需要就這個單一的對稱密鑰達成一致,這個安全使用非對稱加密和服務器的公鑰/私鑰完成的過程。客戶端先用非對稱加密算法的公鑰把通信過程中需要的私鑰傳給服務端,服務端用私鑰解讀出以后通信過程中的私鑰。
客戶端生成一個用于對稱加密算法的隨機密鑰。它使用在Hello階段同意的算法和服務器的公鑰(在其SSL證書上找到)對其進行加密。它將這個加密的密鑰發送到服務器,在那里使用服務器的私鑰解密,并且握手的有趣部分已完成。雙方都非常高興,他們正在與正確的人交談,并秘密地同意了一個密鑰,以對稱加密的方式加密他們將要發送的數據。 HTTP請求和響應現在可以通過形成明文消息然后加密并發送來發送。另一方是唯一知道如何解密此消息的人,因此中間人攻擊者無法讀取或修改他們可能攔截的任何請求。
3. 證書
對于請求方來說,它怎么能確定它所得到的公鑰一定是從目標主機那里發布的,而且沒有被篡改過呢?亦或者請求的目標主機本本身就從事竊取用戶信息的不正當行為呢?這時候,我們需要有一個權威的值得信賴的第三方機構(一般是由政府審核并授權的機構)來統一對外發放主機機構的公鑰,只要請求方這種機構獲取公鑰,就避免了上述問題的發生。
用戶首先產生自己的密鑰對,并將公共密鑰及部分個人身份信息傳送給認證中心。認證中心在核實身份后,將執行一些必要的步驟,以確信請求確實由用戶發送而來,然后,認證中心將發給用戶一個數字證書,該證書內包含用戶的個人信息和他的公鑰信息,同時還附有認證中心的簽名信息(根證書私鑰簽名)。用戶就可以使用自己的數字證書進行相關的各種活動。數字證書由獨立的證書發行機構發布,數字證書各不相同,每種證書可提供不同級別的可信度。
證書的驗證是通過驗證證書的數字簽名(CA的公鑰來解開簽名,并與原文hash之后的摘要做對比).
4. 數字簽名
數字簽名技術就是對“非對稱密鑰加解密”和“數字摘要“兩項技術的應用,它將摘要信息用發送者的私鑰加密,與原文一起傳送給接收者。 接收者只有用發送者的公鑰才能解密被加密的摘要信息,然后用HASH函數對收到的原文產生一個摘要信息,與解密的摘要信息對比。 如果相同,則說明收到的信息是完整的,在傳輸過程中沒有被修改,否則說明信息被修改過,因此數字簽名能夠驗證信息的完整性。
數字簽名的過程如下:
明文 --> hash運算 --> 摘要 --> 私鑰加密 --> 數字簽名
數字簽名有兩種功效:
- 能確定消息確實是由發送方簽名并發出來的,因為別人假冒不了發送方的簽名。
- 數字簽名能確定消息的完整性。
真個HTTPS的握手過程如下
5. 總結
HTTPS不是不可破解的,并且SSL協議必須隨著新攻擊被發現和壓制而不斷發展。但它仍然是一種傳遞秘密數據的的方式,無需關心誰看到您的消息。當然,這里沒有提到許多實現細節,例如握手消息的確切格式和順序,在不需要重新協商密鑰和密碼套件的情況下選擇最近會話的簡短握手,以及在每個階段可用的眾多不同的加密選項。關鍵要記住的是,雖然HTTPS可以保證數據安全地連接到目的地,但它絕不會保護您(作為用戶或開發人員)抵御XSS或數據庫泄漏或任何其他事情 。看看威爾史密斯,“Walk in shadow, move in silence, guard against extra-terrestrial violence”。
參考文章:
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
https://robertheaton.com/2014/03/27/how-does-https-actually-work/
http://www.wxtlife.com/2016/03/27/%E8%AF%A6%E8%A7%A3https%E6%98%AF%E5%A6%82%E4%BD%95%E7%A1%AE%E4%BF%9D%E5%AE%89%E5%85%A8%E7%9A%84%EF%BC%9F/#u6570_u5B57_u8BC1_u4E66