目錄
一、HTTPS是什么?
二、為什么要加密
三、"加密" 是什么
四、HTTPS 的工作過程?
1.對稱加密
2.非對稱加密
3.中間人攻擊
4.證書
總結
一、HTTPS是什么?
HTTPS (Hyper Text Transfer Protocol Secure) 是基于 HTTP 協議之上的安全協議,用于在客戶端和服務器之間通過互聯網傳輸數據的加密和身份驗證。它使用 SSL/TLS (Secure Sockets Layer/Transport Layer Security) 協議來保護數據的安全性,可以防止數據被竊聽、篡改或偽造。
HTTP 協議是一種明文傳輸的協議,數據在傳輸過程中不加密,容易被黑客截獲并竊取敏感信息。而使用 HTTPS 協議進行數據傳輸,可以通過 SSL/TLS 協議將數據加密,使得數據在傳輸過程中無法被黑客竊取,保護了數據的安全性。
HTTPS 還可以對服務器端的身份進行驗證,防止偽造服務器,保護了雙方的身份安全。在 HTTPS 和 SSL/TLS 協議的支持下,現在許多電子商務、銀行、社交網絡和其他網站都采用 HTTPS 協議來保護用戶的隱私和安全。
二、為什么要加密
HTTP 是一種應用層協議,是用于在 Web 應用程序之間傳遞數據的標準方式,但是 HTTP 本身并不安全,因為 HTTP 在傳輸數據時是明文傳輸的,攻擊者可以很容易地截獲和竊取數據。這就會導致以下不安全的情況:
1. 竊取敏感信息: 攻擊者可以竊取用戶登錄信息、信用卡信息、銀行賬戶信息等敏感信息。
2. 篡改數據:攻擊者可以在傳輸過程中篡改數據,比如,將網頁內容篡改成惡意代碼,欺騙用戶下載惡意文件等。
3. 偽造身份:攻擊者可以偽造身份,冒充網站或服務器,從而欺騙用戶提供個人信息或敏感信息。
HTTPS 是在 HTTP 協議基礎上加入了 SSL/TLS 加密機制,對 HTTP 的傳輸過程進行加密,可以保護數據的安全性和完整性,解決了 HTTP 明文傳輸所帶來的安全問題。因此,在需要保護用戶隱私信息或者防止黑客攻擊時,使用 HTTPS 更加安全可靠。
由于我們通過網絡傳輸的任何的數據包都會經過運營商的網絡設備(路由器, 交換機等), 那么運營商的網絡設備就可以解析出你傳輸的數據內容, 并進行篡改.這就是運營商劫持
點擊 "下載按鈕", 其實就是在給服務器發送了一個 HTTP 請求, 獲取到的 HTTP 響應其實就包含了該 APP的下載鏈接. 運營商劫持之后, 就發現這個請求是要下載天天動聽, 那么就自動的把交給用戶的響應給篡改 成 "QQ瀏覽器" 的下載地址了
?三、"加密" 是什么
加密就是把 明文 (要傳輸的信息)進行一系列變換, 生成 密文 .
解密就是把 密文 再進行一系列變換, 還原成 明文 .
在這個加密和解密的過程中, 往往需要一個或者多個中間的數據, 輔助進行這個過程, 這樣的數據稱為 密鑰 (正確發音 yue 四聲, 不過大家平時都讀作 yao 四聲)
四、HTTPS 的工作過程?
既然要保證數據安全, 就需要進行 "加密".
網絡傳輸中不再直接傳輸明文了, 而是加密之后的 "密文".
加密的方式有很多, 但是整體可以分成兩大類: 對稱加密 和 非對稱加密
1.對稱加密
進行安全傳輸,其中最核心的技術就是加密,而其中最為簡單、有效的方法就是“對稱加密”。對稱加密的方式如下:
明文 + ?key ?=>? 密文。加密的過程
密文 + ?key ?=>? 明文。解密的過程
其中key就表示密鑰,是一串數字或者字符串。同一個密鑰可以用來加密也可以用來解密,因此就稱其為“對稱密鑰”。但是其保證安全性的前提是,不能讓密鑰被他人知道,如果密鑰被一些不法之徒獲取,那么這個加密也就形同虛設了。
下面我們用圖片演示過程及信息:
但是問題來了,客戶端需要自己生成一個密鑰,如何把這個密鑰告訴給服務器呢?
答案是:網絡傳輸
這樣的話看起來我們是需要針對key也進行加密一下? 所以接下來我們引用了非對稱加密.
2.非對稱加密
非對稱加密就是,生成一對密鑰,一個叫公鑰(pub)一個叫密鑰(pri)。加密方式如下:
明文 + 公鑰 => 密文。
密文 + 私鑰 => 明文。
其中,明文也可以使用私鑰加密,密文可以使用私鑰解密。公鑰是可以公開的,私鑰是私密的。
所以我們接下來的目標就是客戶端把自己的key安全傳輸到服務器
首先服務器生成一對公鑰私鑰。其中客戶端持有公鑰,服務器持有私鑰。由于客戶端的公鑰從服務器獲取,因此黑客也可以知道公鑰。但是由于私鑰只有服務器才知道,不會告訴別人。因此就算黑客知道了公鑰,也無法解密。
接著客戶端使用公鑰來對對稱密鑰進行加密,傳輸給服務器,服務器通過私鑰進行解密,獲得對稱密鑰。此時客戶端就可以使用這個對稱密鑰進行后續的傳輸工作。
但是由于非對稱加密比較慢,對稱加密比較快。因此一般使用非對稱加密來進行對稱密鑰的加密傳輸。而用對稱加密來進行后續的傳輸工作。?
3.中間人攻擊
上面所說的非對稱加密和對稱加密好像是已經把要傳輸的數據保護的天衣無縫了。但是,其實其中還有一個巨大的漏洞。這就是我們所說的中間人攻擊。
雖然我們認為已經非常安全了,但是黑客不是吃素的
上圖就是關于中間人攻擊的一個介紹。實質上就是黑客在中間充當一個雙面客。服務器將公鑰pub發送過來,黑客在中間劫持。并且自己生成了一對非對稱密鑰。將自己生成的pub2發送給客戶端。但是由于客戶端不知道發送來的pub2是不是服務器發送來的公鑰,因此也就上當。將對稱密鑰通過pub2進行加密,發送給黑客。然后黑客將以pub2加密的對稱密鑰進行解密,那到對稱密鑰。再將對稱密鑰使用pub1進行加密,發送給服務器。由于服務器也不知道這個加密過的對稱密鑰是不是客戶端發過來的,因此也就使用這個對稱密鑰進行后續的加密了。
從上述過程來說,客戶端無法判斷公鑰的真假造成的。如果客戶端可以辨別公鑰的真假,那么這個中間人攻擊也就迎刃而解了!
4.證書
證書是什么
SSL/TLS 證書是一種網絡安全協議,用于在互聯網上建立安全通信。在 HTTPS 這種加密方式中,證書用于驗證網站的身份和保證數據傳輸的安全性。
證書由數字簽名機構(CA)頒發,證明了網站的身份信息和公鑰的有效性。CA 通過審核網站申請者的身份信息,發放證書并簽名,網站通過證書驗證來證明其身份,以確保用戶與網站建立的加密連接是信任的。
證書包含網站的信息,如名稱、域名、過期日期和公鑰等等。證書中的公鑰可用于安全地加密用戶數據并將其發送到服務器。證書還包含簽名,以確保其未被篡改。如果簽名無效或證書已過期,則表示證書不可信任。
瀏覽器通常默認信任一些公共的 CA,這些 CA 證書預裝在瀏覽器中。這意味著如果網站使用由公共 CA 頒發的證書,瀏覽器將信任該證書,并且用戶可以通過 HTTPS 安全地與該網站建立連接。
為了解決上述問題,人們就想出來了“證書”這個方法。就是上服務器(網站)在成立的時候,需要去一些專門的認證機構(第三方機構)申請證書。服務器需要提供一些資質。當申請通過之后,機構就會給你頒發證書。其中,證書中也就包含了公鑰。此時客戶端申請公鑰的時候,此時就不應該只是請求要一個公鑰了,而是請求要一個證書。當客戶端拿到證書之后,就可以進行校驗。驗證證書是不是假的或者被篡改的。如果客戶端發現證書是無效的,瀏覽器就會直接彈框警告。
客戶端拿到證書之后,就首先需要針對證書進行校驗!!
- 得到初始的簽名:客戶端使用系統內置的權威機構的公鑰pub針對證書中的加密簽名解密,得到了初始簽名
- 計算現在的簽名:客戶端使用相同的簽名算法,基于證書的屬性進行計算
- 比較兩個簽名是否相同? 如果相同證明整數中的數據都是未被篡改的原始數據, 如果簽名不同說明證書數據被篡改,客戶端的瀏覽器彈框報錯.
?在這里我們需要明確證書的校驗:
證書中包含很多信息,我們用這些屬性進行一個計算也就是校驗和(簽名),再由證書頒布機構使用自己的私鑰進行加密, 此處我們要知道的是 這個私鑰只有證書機構自己知道
也就是說輸入數據沒有被篡改那么根據相同的算法得到的簽名也是一樣的
反之,簽名不同了,那么數據一邊被篡改了
在這種加密過程下,黑客是無法修改我們數據的,黑客如果想改就要知道證書機構的密鑰,否則解密了之后 黑客無法再次進行加密,那么到客戶端就會直接彈框報錯
總結
HTTPS 工作過程中涉及到的密鑰有三組.
- 第一組(非對稱加密): 用于校驗證書是否被篡改. 服務器持有私鑰(私鑰在注冊證書時獲得), 客戶端持有公鑰(操作系統包含了可信任的 CA 認證機構有哪些, 同時持有對應的公鑰). 服務器使用這個私鑰對證書的簽名進行加密. 客戶端通過這個公鑰解密獲取到證書的簽名, 從而校驗證書內容是否是篡改過.
- 第二組(非對稱加密): 用于協商生成對稱加密的密鑰. 服務器生成這組 私鑰-公鑰 對, 然后通過證書把公鑰傳遞給客戶端. 然后客戶端用這個公鑰給生成的對稱加密的密鑰加密, 傳輸給服務器, 服務器通過私鑰解密獲取到對稱加密密鑰.
- 第三組(對稱加密): 客戶端和服務器后續傳輸的數據都通過這個對稱密鑰加密解密.
其實一切的關鍵都是圍繞這個對稱加密的密鑰. 其他的機制都是輔助這個密鑰工作的.
第二組非對稱加密的密鑰是為了讓客戶端把這個對稱密鑰傳給服務器.
第一組非對稱加密的密鑰是為了讓客戶端拿到第二組