前言
作為一個有追求的程序員,了解行業(yè)發(fā)展趨勢和擴充自己的計算機知識儲備都是很有必要的甩鳄,特別是一些計算機基礎(chǔ)方面的內(nèi)容,就比如本篇文章要講的計算機網(wǎng)絡(luò)方面的知識。本文將為大家詳細梳理一下 HTTPS 的實現(xiàn)原理册踩。
近年來,隨著用戶和互聯(lián)網(wǎng)企業(yè)安全意識的提高和 HTTPS 成本的下降效拭,HTTPS 已經(jīng)越來越普及暂吉。很多互聯(lián)網(wǎng)巨頭也在力推 HTTPS,比如谷歌的 Chrome 瀏覽器在訪問 HTTP 網(wǎng)站時會在地址欄顯示不安全的提醒缎患,微信要求所有的小程序必須使用 HTTPS 傳輸協(xié)議慕的,蘋果也要求所有在 App Store 上架的應(yīng)用必須采用 HTTPS ,國內(nèi)外的大部分主流網(wǎng)站也都已遷移至 HTTPS挤渔,可見 HTTPS 全面取代 HTTP 只是時間問題肮街。
說了這么多,究竟什么是 HTTPS判导,它與 HTTP 相比有什么優(yōu)缺點嫉父?其底層原理又是怎么實現(xiàn)的呢?下面就為你一一解答眼刃,先來看一下 HTTP 的弊端吧绕辖。
1、HTTP 的最大弊端——不安全
HTTP 之所以被 HTTPS 取代鸟整,最大的原因就是不安全引镊,至于為什么不安全,看了下面這張圖就一目了然了篮条。
由圖可見弟头,HTTP 在傳輸數(shù)據(jù)的過程中,所有的數(shù)據(jù)都是明文傳輸涉茧,自然沒有安全性可言赴恨,特別是一些敏感數(shù)據(jù),比如用戶密碼和信用卡信息等伴栓,一旦被第三方獲取伦连,后果不堪設(shè)想。這里可能有人會說钳垮,我在前端頁面對敏感數(shù)據(jù)進行加密不就行了惑淳,比如 MD5 加鹽加密。這么想就太簡單了饺窿。首先 MD5 并不是加密算法歧焦,其全稱是 Message Digest Algorithm MD5,意為信息摘要算法肚医,是一種不可逆的哈希算法绢馍,也就是說經(jīng)過前端 MD5 處理過的數(shù)據(jù)在服務(wù)器端是無法復(fù)原的向瓷。這里以密碼舉例,前端把用戶密碼通過 MD5 進行處理舰涌,并把得到的哈希值發(fā)送給服務(wù)器猖任,服務(wù)器由于無法復(fù)原密碼,就會直接用這個哈希值處理用戶請求瓷耙。所以第三方在獲取這個哈希值后朱躺,可以繞過前端登錄頁面直接訪問服務(wù)器,造成安全問題搁痛。另外室琢,MD5 算法本身的安全性也存在缺陷,這里就不展開談了落追。
總之 MD5盈滴,SHA-1 之類的哈希算法并不能讓 HTTP 變得更安全。要想讓 HTTP 更安全轿钠,只能使用真正的加密算法巢钓,因為加密算法可以用密鑰加密或還原數(shù)據(jù),只要確保密鑰不被第三方獲取疗垛,那就能確保數(shù)據(jù)傳輸?shù)陌踩酥⑿凇6@正是 HTTPS 的解決方案,那下面就來了解一下加密算法吧贷腕。
2背镇、加密算法
HTTPS 解決數(shù)據(jù)傳輸安全問題的方案就是使用加密算法,具體來說是混合加密算法泽裳,也就是對稱加密和非對稱加密的混合使用瞒斩,這里有必要先了解一下這兩種加密算法的區(qū)別和優(yōu)缺點。
2.1 對稱加密
對稱加密涮总,顧名思義就是加密和解密都是使用同一個密鑰胸囱,常見的對稱加密算法有 DES、3DES 和 AES 等瀑梗,其優(yōu)缺點如下:
- 優(yōu)點:算法公開烹笔、計算量小、加密速度快抛丽、加密效率高谤职,適合加密比較大的數(shù)據(jù)。
- 缺點:
- 交易雙方需要使用相同的密鑰亿鲜,也就無法避免密鑰的傳輸允蜈,而密鑰在傳輸過程中無法保證不被截獲,因此對稱加密的安全性得不到保證。
- 每對用戶每次使用對稱加密算法時陷寝,都需要使用其他人不知道的惟一密鑰,這會使得發(fā)收信雙方所擁有的鑰匙數(shù)量急劇增長其馏,密鑰管理成為雙方的負擔凤跑。對稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因為密鑰管理困難叛复,使用成本較高仔引。
本文不對具體的加密算法做詳細介紹,有興趣的同學(xué)可以參考 對稱加密算法詳解褐奥,如果直接將對稱加密算法用在 HTTP 中咖耘,會是下面的效果:
從圖中可以看出,被加密的數(shù)據(jù)在傳輸過程中是無規(guī)則的亂碼撬码,即便被第三方截獲儿倒,在沒有密鑰的情況下也無法解密數(shù)據(jù),也就保證了數(shù)據(jù)的安全呜笑。但是有一個致命的問題夫否,那就是既然雙方要使用相同的密鑰,那就必然要在傳輸數(shù)據(jù)之前先由一方把密鑰傳給另一方叫胁,那么在此過程中密鑰就很有可能被截獲凰慈,這樣一來加密的數(shù)據(jù)也會被輕松解密。那如何確保密鑰在傳輸過程中的安全呢驼鹅?這就要用到非對稱加密了微谓。
2.2 非對稱加密
非對稱加密,顧名思義输钩,就是加密和解密需要使用兩個不同的密鑰:公鑰(public key)和私鑰(private key)豺型。公鑰與私鑰是一對,如果用公鑰對數(shù)據(jù)進行加密买乃,只有用對應(yīng)的私鑰才能解密触创;如果用私鑰對數(shù)據(jù)進行加密,那么只有用對應(yīng)的公鑰才能解密为牍。非對稱加密算法實現(xiàn)機密信息交換的基本過程是:甲方生成一對密鑰并將其中的一把作為公鑰對外公開哼绑;得到該公鑰的乙方使用公鑰對機密信息進行加密后再發(fā)送給甲方;甲方再用自己保存的私鑰對加密后的信息進行解密碉咆。如果對公鑰和私鑰不太理解抖韩,可以想象成一把鑰匙和一個鎖頭,只是全世界只有你一個人有這把鑰匙疫铜,你可以把鎖頭給別人茂浮,別人可以用這個鎖把重要的東西鎖起來,然后發(fā)給你,因為只有你一個人有這把鑰匙席揽,所以只有你才能看到被這把鎖鎖起來的東西顽馋。常用的非對稱加密算法是 RSA 算法,想詳細了解的同學(xué)點這里:RSA 算法詳解一幌羞、RSA 算法詳解二寸谜,其優(yōu)缺點如下:
- 優(yōu)點:算法公開,加密和解密使用不同的鑰匙属桦,私鑰不需要通過網(wǎng)絡(luò)進行傳輸熊痴,安全性很高。
- 缺點:計算量比較大聂宾,加密和解密速度相比對稱加密要慢上很多果善。
由于非對稱加密的強安全性,可以用它完美解決對稱加密的密鑰泄露問題系谐,效果圖如下:
在上述過程中巾陕,客戶端在拿到服務(wù)器的公鑰后,會生成一個隨機碼 (用 KEY 表示纪他,這個 KEY 就是后續(xù)雙方用于對稱加密的密鑰)惜论,然后客戶端使用公鑰把 KEY 加密后再發(fā)送給服務(wù)器,服務(wù)器使用私鑰將其解密止喷,這樣雙方就有了同一個密鑰 KEY馆类,然后雙方再使用 KEY 進行對稱加密交互數(shù)據(jù)。在非對稱加密的數(shù)據(jù)傳輸過程中弹谁,即便第三方獲取了公鑰和加密后的 KEY乾巧,在沒有私鑰的情況下也無法破解 KEY (私鑰存在服務(wù)器,泄露風險極小)预愤,也就保證了接下來對稱加密的數(shù)據(jù)安全沟于。而上面這個流程圖正是 HTTPS 的雛形,HTTPS 正好綜合了這兩種加密算法的優(yōu)點植康,不僅保證了通信安全旷太,還保證了數(shù)據(jù)傳輸效率。
3销睁、HTTPS 原理詳解
先看一下維基百科對 HTTPS 的定義
Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It is used for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is encrypted using Transport Layer Security (TLS) or, formerly, its predecessor, Secure Sockets Layer (SSL). The protocol is therefore also often referred to as HTTP over TLS, or HTTP over SSL.
HTTPS (Hypertext Transfer Protocol Secure) 是基于 HTTP 的擴展供璧,用于計算機網(wǎng)絡(luò)的安全通信,已經(jīng)在互聯(lián)網(wǎng)得到廣泛應(yīng)用冻记。在 HTTPS 中睡毒,原有的 HTTP 協(xié)議會得到 TLS (安全傳輸層協(xié)議) 或其前輩 SSL (安全套接層) 的加密。因此 HTTPS 也常指 HTTP over TLS 或 HTTP over SSL冗栗。
可見HTTPS 并非獨立的通信協(xié)議演顾,而是對 HTTP 的擴展供搀,保證了通信安全,二者關(guān)系如下:
也就是說 HTTPS = HTTP + SSL / TLS钠至。
接下來就是最重要的 HTTPS 原理解析了葛虐,老規(guī)矩先上圖。
看上去眼花繚亂,不要怕掰盘,且聽我細細道來。HTTPS 的整個通信過程可以分為兩大階段:證書驗證和數(shù)據(jù)傳輸階段赞季,數(shù)據(jù)傳輸階段又可以分為非對稱加密和對稱加密兩個階段愧捕。具體流程按圖中的序號講解。
客戶端請求 HTTPS 網(wǎng)址申钩,然后連接到 server 的 443 端口 (HTTPS 默認端口次绘,類似于 HTTP 的80端口)。
采用 HTTPS 協(xié)議的服務(wù)器必須要有一套數(shù)字 CA (Certification Authority)證書撒遣,證書是需要申請的邮偎,并由專門的數(shù)字證書認證機構(gòu)(CA)通過非常嚴格的審核之后頒發(fā)的電子證書 ( (當然了是要錢的,安全級別越高價格越貴))义黎。頒發(fā)證書的同時會產(chǎn)生一個私鑰和公鑰禾进。私鑰由服務(wù)端自己保存,不可泄漏廉涕。公鑰則是附帶在證書的信息中泻云,可以公開的。證書本身也附帶一個證書電子簽名狐蜕,這個簽名用來驗證證書的完整性和真實性宠纯,可以防止證書被篡改。
服務(wù)器響應(yīng)客戶端請求层释,將證書傳遞給客戶端婆瓜,證書包含公鑰和大量其他信息,比如證書頒發(fā)機構(gòu)信息贡羔,公司信息和證書有效期等廉白。Chrome 瀏覽器點擊地址欄的鎖標志再點擊證書就可以看到證書詳細信息。
-
客戶端解析證書并對其進行驗證乖寒。如果證書不是可信機構(gòu)頒布蒙秒,或者證書中的域名與實際域名不一致,或者證書已經(jīng)過期宵统,就會向訪問者顯示一個警告晕讲,由其選擇是否還要繼續(xù)通信覆获。就像下面這樣:
如果證書沒有問題,客戶端就會從服務(wù)器證書中取出服務(wù)器的公鑰A瓢省。然后客戶端還會生成一個隨機碼 KEY弄息,并使用公鑰A將其加密。
客戶端把加密后的隨機碼 KEY 發(fā)送給服務(wù)器勤婚,作為后面對稱加密的密鑰摹量。
服務(wù)器在收到隨機碼 KEY 之后會使用私鑰B將其解密。經(jīng)過以上這些步驟馒胆,客戶端和服務(wù)器終于建立了安全連接缨称,完美解決了對稱加密的密鑰泄露問題,接下來就可以用對稱加密愉快地進行通信了祝迂。
服務(wù)器使用密鑰 (隨機碼 KEY)對數(shù)據(jù)進行對稱加密并發(fā)送給客戶端睦尽,客戶端使用相同的密鑰 (隨機碼 KEY)解密數(shù)據(jù)。
雙方使用對稱加密愉快地傳輸所有數(shù)據(jù)型雳。
好了当凡,以上就是 HTTPS 的原理詳解了,如此精美的圖搭配這么詳細的過程解析纠俭,你再搞不懂就說不過去了吧哈哈沿量。
4、總結(jié)
再來總結(jié)一下 HTTPS 和 HTTP 的區(qū)別以及 HTTPS 的缺點吧:
HTTPS 和 HTTP 的區(qū)別:
- 最最重要的區(qū)別就是安全性冤荆,HTTP 明文傳輸朴则,不對數(shù)據(jù)進行加密安全性較差。HTTPS (HTTP + SSL / TLS)的數(shù)據(jù)傳輸過程是加密的钓简,安全性較好佛掖。
- 使用 HTTPS 協(xié)議需要申請 CA 證書,一般免費證書較少涌庭,因而需要一定費用芥被。證書頒發(fā)機構(gòu)如:Symantec、Comodo坐榆、DigiCert 和 GlobalSign 等拴魄。
- HTTP 頁面響應(yīng)速度比 HTTPS 快,這個很好理解席镀,由于加了一層安全層匹中,建立連接的過程更復(fù)雜,也要交換更多的數(shù)據(jù)豪诲,難免影響速度顶捷。
- 由于 HTTPS 是建構(gòu)在 SSL / TLS 之上的 HTTP 協(xié)議,所以屎篱,要比 HTTP 更耗費服務(wù)器資源服赎。
- HTTPS 和 HTTP 使用的是完全不同的連接方式葵蒂,用的端口也不一樣,前者是 443重虑,后者是 80践付。
HTTPS 的缺點:
- 在相同網(wǎng)絡(luò)環(huán)境中,HTTPS 相比 HTTP 無論是響應(yīng)時間還是耗電量都有大幅度上升缺厉。
- HTTPS 的安全是有范圍的永高,在黑客攻擊、服務(wù)器劫持等情況下幾乎起不到作用提针。
- 在現(xiàn)有的證書機制下命爬,中間人攻擊依然有可能發(fā)生。
- HTTPS 需要更多的服務(wù)器資源辐脖,也會導(dǎo)致成本的升高饲宛。
另外,關(guān)于 SSL/TLS 握手的詳細過程和相關(guān)重要概念揖曾,作者將在HTTPS 詳解二中進行詳細介紹落萎。
好了亥啦,以上就是本篇文章的全部內(nèi)容了炭剪,如有錯誤,歡迎指正翔脱。最后貼幾篇參考文章