快速理解HTTPS
?
http和https
HTTP:超文本傳輸協議(英文:HyperText Transfer Protocol,縮寫:HTTP)是一種用于分布式、協作式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通信的基礎。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。通過HTTP或者HTTPS協議請求的資源由統一資源標識符(Uniform Resource Identifiers,URI)來標識。
簡單來說,HTTP 是一種超文本傳輸協議,它是無狀態的、簡單快速的、基于 TCP 的可靠傳輸協議。
HTTP特點:
在HTTP/2出現之后,HTTP的傳輸效率得到了巨大提升,這歸功于其多路復用技術。然而,?HTTP 協議這么好,那怎么又冒出來了一個 HTTPS 呢?
主要是因為 HTTP 是明文傳輸的,這就造成了很大的安全隱患。在網絡傳輸過程中,只要數據包被人劫持,那你就相當于赤身全裸的暴露在他人面前,毫無半點隱私可言。想象一下,如果你連了一個不可信的 WIFI,正好有使用了某個支付軟件進行了支付操作,那么你的密碼可能就到別人手里去了,后果可想而知。
隨著互聯網的發展和普及,網絡安全問題越發引入注意,HTTPS便應運而生。
HTTPS:超文本傳輸安全協議(英語:Hypertext Transfer Protocol Secure,縮寫:HTTPS,常稱為HTTP over TLS,HTTP over SSL或HTTP Secure)是一種通過計算機網絡進行安全通信的傳輸協議。HTTPS經由HTTP進行通信,但利用SSL/TLS來加密數據包。HTTPS開發的主要目的,是提供對網站服務器的身份認證,保護交換數據的隱私與完整性。這個協議由網景公司(Netscape)在1994年首次提出,隨后擴展到互聯網上。
簡單來說,HTTPS是身披SSL外殼的HTTP,它本質上還是HTTP協議,使用HTTPS可以保護所有類型網站上的網頁真實性,保護賬戶和保持用戶通信,身份和網絡瀏覽的私密性。
?
背景
從風險的角度來說,HTTPS解決了HTTP的三個問題,如下:
HTTP 三大風險:
HTTPS 解決方案:
?
實現
上面講了這么多,大家應該對HTTPS有了一點了解了吧。但是對于其本質,以及如何保護數據安全的原理應該還是糊里糊涂的吧。別急,我們這就來了解一下神奇的HTTPS如何保障數據安全。
【注:HTTPS并非絕對的安全,但是它能很大程度上保護數據安全,因為要破解HTTPS安全機制從而獲取或者篡改數據需要花費大量的人力物力,這對于那些居心不良的人來說是很不愿意做的事情】
由于HTTPS涉及到了一些術語,在這里我先解釋一下,到時候方便理解。
對稱加密:即通信雙方通過相同的密鑰進行信息的加解密。加解密速度快,但是安全性較差,如果其中一方泄露了密鑰,那加密過程就會被人破解。
非對稱加密:相比對稱加密,非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數據進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。兩把密鑰分別由發送雙發各自保管,加解密過程需兩把密鑰共同完成。安全性更高,但同時計算量也比對稱加密要大很多。
混合加密:結合非對稱加密和對稱加密技術。客戶端使用對稱加密生成密鑰對傳輸數據進行加密,然后使用非對稱加密的公鑰再對對稱加密的密鑰進行加密,所以網絡上傳輸的數據是被對稱加密的密鑰加密后的內容和用非對稱加密的公鑰加密后的對稱加密的密鑰,因此即使被黑客截取,由于沒有非對稱加密的私鑰,無法獲取到加密明文的對稱加密的密鑰,便無法獲取到明文數據。 【ps:這里好繞呀╮(╯﹏╰)╭】
CA:證書頒發機構(Certificate Authority)即頒發數字證書的機構。是負責發放和管理數字證書的權威機構,并作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。CA中心為每個使用公開密匙的用戶發放一個數字證書,數字證書的作用是證明證書中列出的用戶合法擁有證書中列出的公開密鑰。CA機構的數字簽名使得攻擊者不能偽造和篡改證書。
數字簽名:CA會對服務端的公鑰和服務端信息用一個Hash算法生成一個消息摘要,然后CA再用它的私鑰對消息摘要加密,形成簽名,這就是數字簽名。【注:使用Hash算法有個極好的特性,只要輸入數據有一點點變化,那生成的消息摘要就會有巨變,這樣就可以防止別人修改原始內容】
數字證書:CA將服務端的信息以及服務端的數字簽名合并, 形成一個全新的東西,叫做“數字證書”。當服務端把它的證書發給其他人之后, 別人就用同樣的Hash 算法, 再次生成消息摘要,然后用CA的公鑰對數字簽名解密, 得到CA創建的消息摘要, 兩者一比,就知道有沒有人篡改了。【注:在操作系統/瀏覽器中會內置一些頂層的CA的證書】
基礎術語解釋完畢之后,我們來看看使用HTTPS的時候,一些校驗流程,如下圖:
?
整個流程大致如上面所說的。另外有幾個點再說一下。
1. 為什么要使用服務端的公鑰來加密對稱加密的密鑰?
其實上面有說過,服務端的公鑰和私鑰是一對的,用公鑰加密的內容必須使用私鑰才能解密,用私鑰加密的內容必須使用公鑰來解密。公鑰誰都能知道,但是只有服務器知道私鑰。使用服務端的公鑰來加密對稱加密的密鑰,也就是說必須要使用服務器的私鑰來解密,而黑客等中間人他們是不可能知道服務端的私鑰是什么的,所以他們便無法解密得到用于加密數據的密鑰,自然而然沒辦法篡改數據的傳輸。
2. 如何保障證書安全傳輸?如何保障服務器給客戶端下發的公鑰是真正的公鑰?
這里面涉及到了證書的校驗原理,上面在解釋術語的時候就有說到過校驗過程,這里貼一張圖片出來看看,會更加直觀,如圖:
?
當服務端把它的證書發給其他人之后, 別人也對證書的信息內容用CA使用的Hash 算法進行處理, 再次生成消息摘要,然后用CA的公鑰對數字簽名解密, 得到CA創建的消息摘要, 兩者一比,就知道有沒有人篡改了。
另外,即便中間人雖然有權威機構的公鑰,能夠解析證書內容并篡改,但是篡改完成之后中間人需要將證書重新加密,但是中間人沒有權威機構的私鑰,無法加密,強行加密只會導致客戶端無法解密,如果中間人強行亂修改證書,就會導致證書內容和證書簽名不匹配,我們就能知道證書是不是被篡改了。
?
弊端
當然,從其他角度來說,HTTPS也具有其弊端,畢竟沒有什么東西是絕對完美的。
1.?網絡耗時增加
使用HTTP的時候,只需要完成 TCP 三次握手建立 TCP 連接就能夠直接發送 HTTP 請求獲取應用層數據,此外在整個訪問過程中也沒有需要消耗計算資源的地方。
而HTTPS 的訪問過程,相比 HTTP 要復雜很多。
對于用戶來說,一般發起的是HTTP請求。舉個例子,比如說訪問百度首頁,絕大部分用戶不會手動輸入 https://www.baidu.com 來訪問 HTTPS,對吧。好,那我們看看這里面有哪些地方會增加耗時的地方。
由于用戶沒有使用HTTPS請求,服務端只能返回 302 強制瀏覽器跳轉到 HTTPS,這個時候就需要多話費一些時間,而且瀏覽器處理 302 跳轉也需要耗時。
通過302 跳轉到 HTTPS 服務器之后,由于端口和服務器不同,需要重新完成三次握手,建立 TCP 連接。這里也增加了耗時。
瀏覽器校驗證書,驗證證書有效性、服務器信息等過程也需要時間處理。
當然,增加耗時的地方不止上面所列的三點,比如說瀏覽器有可能更CA域名解析、握手等情況。?但是,我們能從上面這個粗糙的例子中知道,HTTPS相對于HTTP的確會增加不少的網絡耗時情況。
2.?計算耗時增加
瀏覽器校驗證書、數據加密等等以及服務器獲取對稱密匙、解密數據等都需要耗費時間。當數據量多的時候,這對服務器CPU的計算能力也提出來很高的要求。
3. 價格昂貴
SSL證書需要購買申請,功能越強大的證書費用越高。【注:這個是導致HTTPS普及率低的很重要原因,因為對于個人來說實在是太貴了。但是目前網上也有一些可以申請免費SSL證書的機構,但是限制比較多。】
?
前景
這些年谷歌一直力推HTTPS協議,對Chrome的用戶界面做出了一些改變。2017年1月發布的Chrome 56瀏覽器開始把收集密碼或信用卡數據的HTTP頁面標記為“不安全”。若用戶使用2017年10月推出的Chrome 62,帶有輸入數據的HTTP頁面和所有以無痕模式瀏覽的HTTP頁面都會被標記為“不安全”。到了2018年7月,Chrome瀏覽器的地址欄將把所有HTTP標示為不安全網站。
除去谷歌,其他一些互聯網公司也進行了自己的?HTTPS 實現,比如當前國內炒的很火熱的微信小程序也要求必須使用 HTTPS 協議;新一代 HTTP/2 協議的支持必須以 HTTPS 為基礎;蘋果公司要求App Store當中的所有應用必須使用HTTPS傳輸等等。
總而言之,HTTPS和傳統的HTTP主要的差異遭遇安全性方面,HTTPS上的站點數據,在互聯網上傳播具有動態的加密特性,所以安全性較高,而HTTP則沒有這個功能,在如今網絡安全日益突出的大環境下,HTTPS必然成為趨勢。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: 程序猿的血泪史
- 下一篇: WEB 实时推送技术总结