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