HTTPS是什么?SSL/TLS又是什么?


一、為什么要有 HTTPS?
簡單的回答是“因為 HTTP 不安全”。

由於 HTTP 天生“明文”的特點,整個傳輸過程完全透明,任何人都能夠在鏈路中截獲、修改或者偽造請求 / 響應報文,數據不具有可信性。

既然 HTTP“不安全”,那什么樣的通信過程才是安全的呢?

通常認為,如果通信過程具備了四個特性,就可以認為是“安全”的,這四個特性是:機密性、完整性,身份認證和不可否認。

機密性(Secrecy/Confidentiality)是指對數據的“保密”,只能由可信的人訪問,對其他人是不可見的“秘密”,簡單來說就是不能讓不相關的人看到不該看的東西。

比如小明和小紅私下聊天,但“隔牆有耳”,被小強在旁邊的房間里全偷聽到了,這就是沒有機密性。我們之前一直用的 Wireshark ,實際上也是利用了 HTTP 的這個特點,捕獲了傳輸過程中的所有數據。

完整性(Integrity,也叫一致性)是指數據在傳輸過程中沒有被竄改,不多也不少,“完完整整”地保持着原狀。

機密性雖然可以讓數據成為“秘密”,但不能防止黑客對數據的修改,黑客可以替換數據,調整數據的順序,或者增加、刪除部分數據,破壞通信過程。

比如,小明給小紅寫了張紙條:“明天公園見”。小強把“公園”划掉,模仿小明的筆跡把這句話改成了“明天廣場見”。小紅收到后無法驗證完整性,信以為真,第二天的約會就告吹了。

身份認證(Authentication)是指確認對方的真實身份,也就是“證明你真的是你”,保證消息只能發送給可信的人。

如果通信時另一方是假冒的網站,那么數據再保密也沒有用,黑客完全可以使用冒充的身份“套”出各種信息,加密和沒加密一樣。

比如,小明給小紅寫了封情書:“我喜歡你”,但不留心發給了小強。小強將錯就錯,假冒小紅回復了一個“白日做夢”,小明不知道這其實是小強的話,誤以為是小紅的,后果可想而知。

第四個特性是不可否認(Non-repudiation/Undeniable),也叫不可抵賴,意思是不能否認已經發生過的行為,不能“說話不算數”“耍賴皮”。

使用前三個特性,可以解決安全通信的大部分問題,但如果缺了不可否認,那通信的事務真實性就得不到保證,有可能出現“老賴”。

比如,小明借了小紅一千元,沒寫借條,第二天矢口否認,小紅也確實拿不出借錢的證據,只能認倒霉。另一種情況是小明借錢后還了小紅,但沒寫收條,小紅於是不承認小明還錢的事,說根本沒還,要小明再掏出一千元。

二、什么是 HTTPS?

HTTPS 其實是一個“非常簡單”的協議,RFC 文檔很小,只有短短的 7 頁,里面規定了新的協議名“https”,默認端口號 443,至於其他的什么請求 - 應答模式、報文結構、請求方法、URI、頭字段、連接管理等等都完全沿用 HTTP,沒有任何新的東西。

也就是說,除了協議名“http”和端口號 80 這兩點不同,HTTPS 協議在語法、語義上和 HTTP 完全一樣,優缺點也“照單全收”(當然要除去“明文”和“不安全”)。

 

 

在用 HTTPS 訪問實驗環境時 Chrome 會有不安全提示,必須點擊“高級 - 繼續前往”才能順利顯示頁面。而且如果用 Wireshark 抓包,也會發現與 HTTP 不一樣,不再是簡單可見的明文,多了“Client Hello”“Server Hello”等新的數據包。

這就是 HTTPS 與 HTTP 最大的區別,它能夠鑒別危險的網站,並且盡最大可能保證你的上網安全,防御黑客對信息的竊聽、竄改或者“釣魚”、偽造。

你可能要問了,既然沒有新東西,HTTPS 憑什么就能做到機密性、完整性這些安全特性呢?

秘密就在於 HTTPS 名字里的“S”,它把 HTTP 下層的傳輸協議由 TCP/IP 換成了 SSL/TLS,由“HTTP over TCP/IP”變成了“HTTP over SSL/TLS”,讓 HTTP 運行在了安全的 SSL/TLS 協議上(可參考第 4 講和第 5 講),收發報文不再使用 Socket API,而是調用專門的安全接口。

 

 

 所以說,HTTPS 本身並沒有什么“驚世駭俗”的本事,全是靠着后面的 SSL/TLS“撐腰”。只要學會了 SSL/TLS,HTTPS 自然就“手到擒來”。

三、SSL/TLS

SSL 即安全套接層(Secure Sockets Layer),在 OSI 模型中處於第 5 層(會話層),由網景公司於 1994 年發明,有 v2 和 v3 兩個版本,而 v1 因為有嚴重的缺陷從未公開過。
TLS 由記錄協議、握手協議、警告協議、變更密碼規范協議、擴展協議等幾個子協議組成,綜合使用了對稱加密、非對稱加密、身份認證等許多密碼學前沿技術。

瀏覽器和服務器在使用 TLS 建立連接時需要選擇一組恰當的加密算法來實現安全通信,這些算法的組合被稱為“密碼套件”(cipher suite,也叫加密套件)。

你可以訪問實驗環境的 URI“/23-1”,對 TLS 和密碼套件有個感性的認識。

 

 

你可以看到,實驗環境使用的 TLS 是 1.2,客戶端和服務器都支持非常多的密碼套件,而最后協商選定的是“ECDHE-RSA-AES256-GCM-SHA384”。

這么長的名字看着有點暈吧,不用怕,其實 TLS 的密碼套件命名非常規范,格式很固定。基本的形式是“密鑰交換算法 + 簽名算法 + 對稱加密算法 + 摘要算法”,比如剛才的密碼套件的意思就是:

“握手時使用 ECDHE 算法進行密鑰交換,用 RSA 簽名和身份認證,握手后的通信使用 AES 對稱算法,密鑰長度 256 位,分組模式是 GCM,摘要算法 SHA384 用於消息認證和產生隨機數。”

至此,結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM