引言
HTTPS的使用越來越廣泛抢腐,淘寶姑曙、京東、當(dāng)當(dāng)?shù)却笮途W(wǎng)站幾乎全站采用HTTPS迈倍。本文參考了若干文章并結(jié)合自己理解伤靠,簡(jiǎn)要敘述HTTPS加密的工作原理。
加密算法簡(jiǎn)介
在這之前需要先補(bǔ)充以下幾個(gè)概念:
1.對(duì)稱加密
使用相同的密鑰進(jìn)行加密和解密。對(duì)稱加密使用簡(jiǎn)單宴合,計(jì)算量小焕梅,加密和解密過程較快,常見的對(duì)稱加密算法有DES卦洽,3DES贞言,lDEA,AES阀蒂,RC4等该窗。
2.非對(duì)稱加密
與對(duì)稱加密不同,其加密算法需要兩個(gè)密鑰:公開密鑰(public key)和私有密鑰(private key)蚤霞,兩者是一對(duì)的酗失。公鑰負(fù)責(zé)加密,私鑰負(fù)責(zé)解密昧绣。非對(duì)稱加密相比對(duì)稱加密安全性好规肴,但加密和解密花費(fèi)時(shí)間長(zhǎng)、速度慢夜畴,只適合對(duì)少量數(shù)據(jù)進(jìn)行加密拖刃。常見的非對(duì)稱加密算法有RSA,ECC斩启,DSA(數(shù)字簽名)等。
3.Hash算法
將任意長(zhǎng)度的數(shù)據(jù)映射為固定長(zhǎng)度且唯一的hash值,并且不能通過這個(gè)hash值重新計(jì)算出原始數(shù)據(jù)醉锅,如果原始數(shù)據(jù)有任何修改兔簇,隨后的哈希都將產(chǎn)生不同的值,因此Hash算法經(jīng)常被用在檢驗(yàn)數(shù)據(jù)的完整性硬耍,常用的算法有MD2垄琐,MD4,MD5经柴,SHA等狸窘。
HTTPS加密原理
HTTPS簡(jiǎn)單來說就是 HTTP 的安全版,相比于HTTP坯认,它在介于 TCP 和 HTTP 之間添加了一層TLS/SSL安全協(xié)議翻擒。HTTP 協(xié)議采用明文傳輸信息,存在信息竊聽牛哺、信息篡改和信息劫持的風(fēng)險(xiǎn)陋气,而協(xié)議 TLS/SSL 具有身份驗(yàn)證、信息加密和完整性校驗(yàn)的功能引润,可以避免此類問題巩趁,因此我們可以簡(jiǎn)單的認(rèn)為HTTPS就是使用 TLS/SSL 加密的 HTTP 協(xié)議。下面我們就介紹在HTTPS加密過程中采用過的若干加密方案淳附。
1.對(duì)稱加密方案
最簡(jiǎn)單的方案是僅使用對(duì)稱加密:
從上圖的流程中议慰,我們可以很清楚的看到蠢古,這個(gè)方案是極不安全的,一旦該通信被人劫持别凹,就可以輕易的根據(jù)密鑰解密數(shù)據(jù)草讶。
2.非對(duì)稱加密方案
而如果采用非對(duì)稱加密,上述的不安全問題將得到解決:
因?yàn)樗借€在服務(wù)端手中番川,即使通信過程中被人劫持了信息到涂,沒有密鑰,劫持者沒有私鑰也無法解密數(shù)據(jù)颁督。這種方法似乎是安全的(后面會(huì)講述這個(gè)方案存在的隱患)践啄,但是非對(duì)稱加密耗時(shí)耗資源,影響用戶體驗(yàn)沉御,因此不推薦使用非對(duì)稱加密屿讽。
3.對(duì)稱與非對(duì)稱加密結(jié)合方案
使用對(duì)稱加密,雖然速度快吠裆,但不安全伐谈。而非對(duì)稱加密雖然較為安全,但速度慢试疙。由此看來诵棵,如果兩種方案結(jié)合起來,是不是就能兩全其美了呢祝旷?因?yàn)閷?duì)稱加密速度快履澳,我們最好選用對(duì)稱加密來加密數(shù)據(jù),但對(duì)稱加密不安全怀跛,那么我們只要用非對(duì)稱加密來保證安全距贷。那如何用非對(duì)稱加密保證對(duì)稱加密的安全性呢?
由之前可知吻谋,對(duì)稱加密的不安全性主要體現(xiàn)在密鑰容易在通信過程中被人劫持忠蝗,那么我們只要從密鑰下手,使用非對(duì)稱加密來加密這個(gè)對(duì)稱密鑰就可以了漓拾。但問題又來了阁最,這里又用對(duì)稱加密,又用非對(duì)稱加密骇两,豈不是更耗時(shí)耗資源么闽撤?
其實(shí)不然,因?yàn)榉菍?duì)稱加密僅僅在第一次客戶端請(qǐng)求時(shí)才會(huì)使用脯颜,當(dāng)服務(wù)端獲取到了客戶端的公鑰后哟旗,就不必重新使用非對(duì)稱私鑰解密獲取對(duì)稱密鑰了。兩者結(jié)合的大致流程如下:
中間人攻擊
乍看之下,上面的方案既安全闸餐,又快速饱亮。但是還是存在著被攻擊的可能蜕青,那就是中間人攻擊嫩与●荆客戶端并不能確定請(qǐng)求到的服務(wù)端公鑰是否是真的來自于服務(wù)端儒溉,也許客戶端在向服務(wù)器請(qǐng)求公鑰的過程中就已經(jīng)被人攻擊,客戶端獲取到的公鑰也可能是中間人偽造的凯正。
上面造成的結(jié)果就是:
- 服務(wù)端和客戶端之間的通信完全被中間人掌握脚祟,中間人可以對(duì)信息進(jìn)行竊聽绍在、篡改等感帅。
- 信息抵賴:服務(wù)器可以否認(rèn)自己發(fā)出的消息斗锭,不承認(rèn)相關(guān)信息是自己發(fā)出的。
證書
為了避免中間人攻擊失球,客戶端需要確保請(qǐng)求到的公鑰是目標(biāo)服務(wù)器提供的岖是,該公鑰不能被偽造,這時(shí)候就用到了證書实苞,證書里面包含了網(wǎng)站地址豺撑,加密公鑰,以及證書的頒發(fā)機(jī)構(gòu)等信息黔牵〈辖危客戶端獲取到證書后,會(huì)驗(yàn)證證書的有效性(有效期猾浦,頒發(fā)機(jī)構(gòu))陆错。關(guān)于證書的機(jī)制,下回再弄個(gè)單獨(dú)的篇章講解~ 這次先說到這里跃巡。
結(jié)語
HTTPS其實(shí)就是通過服務(wù)端證書非對(duì)稱加密的方式實(shí)現(xiàn)雙方身份的驗(yàn)證危号,第一次客戶端返回給服務(wù)端的對(duì)稱密鑰通過服務(wù)端提供的非對(duì)稱密鑰進(jìn)行了加密牧愁,然后雙方數(shù)據(jù)的傳輸都用客戶端生成的對(duì)稱密鑰處理素邪,這樣僅是第一次獲取密鑰時(shí)速度稍慢,但之后的處理都是對(duì)稱加解密速度猪半。