https
對(duì)稱密鑰加密
非對(duì)稱密鑰加密
Http的缺點(diǎn)
- 通信使用明文(不加密),內(nèi)容可能被竊聽
- 不驗(yàn)證通信雙方的身份,因此有可能遭遇偽裝
- 無法證明報(bào)文的完成性,所以有可能已遭篡改
正是由于這些不足,才有必要學(xué)習(xí)并使用https廉邑。
1.為什么需要HTTPS
HTTP是明文傳輸?shù)牡构龋簿鸵馕吨橛诎l(fā)送端牵祟、接收端中間的任意節(jié)點(diǎn)都可以知道你們傳輸?shù)膬?nèi)容是什么抖格。這些節(jié)點(diǎn)可能是路由器、代理等收奔。
舉個(gè)最常見的例子滓玖,用戶登陸。用戶輸入賬號(hào)翩肌,密碼,采用HTTP的話汰蓉,只要在代理服務(wù)器上做點(diǎn)手腳就可以拿到你的密碼了棒卷。
用戶登陸 --> 代理服務(wù)器(做手腳)--> 實(shí)際授權(quán)服務(wù)器
2.HTTPS是如何保障安全的
HTTPS其實(shí)就是secure http的意思啦,也就是HTTP的安全升級(jí)版若厚。稍微了解網(wǎng)絡(luò)基礎(chǔ)的同學(xué)都知道蜒什,HTTP是應(yīng)用層協(xié)議,位于HTTP協(xié)議之下是傳輸協(xié)議TCP霎冯。TCP負(fù)責(zé)傳輸钞瀑,HTTP則定義了數(shù)據(jù)如何進(jìn)行包裝。
HTTP --> TCP (明文傳輸)
3.HTTPS相對(duì)于HTTP有哪些不同呢缠俺?
其實(shí)就是在HTTP跟TCP中間加多了一層加密層TLS/SSL贷岸。
通俗的講,TLS躏救、SSL其實(shí)是類似的東西户敬,SSL是個(gè)加密套件,負(fù)責(zé)對(duì)HTTP的數(shù)據(jù)進(jìn)行加密。TLS是SSL的升級(jí)版∧匮撸現(xiàn)在提到HTTPS,加密套件基本指的是TLS皮假。
傳輸流程的加密
HTTP是在應(yīng)用層將數(shù)據(jù)直接給到TCP進(jìn)行傳輸,HTTPS改成應(yīng)用層將數(shù)據(jù)給到TLS/SSL贺纲,將數(shù)據(jù)加密后褪测,再給到TCP進(jìn)行傳輸。
大致如圖所示:
就是這么回事懈叹。將數(shù)據(jù)加密后再傳輸分扎,而不是任由數(shù)據(jù)在復(fù)雜而又充滿危險(xiǎn)的網(wǎng)絡(luò)上明文裸奔,在很大程度上確保了數(shù)據(jù)的安全墨状。這樣的話菲饼,即使數(shù)據(jù)被中間節(jié)點(diǎn)截獲,壞人也看不懂通今。
4.HTTPS是如何加密數(shù)據(jù)的肛根?
對(duì)安全或密碼學(xué)基礎(chǔ)有了解的同學(xué),應(yīng)該知道常見的加密手段臼氨。一般來說,加密分為對(duì)稱加密储矩、非對(duì)稱加密(也叫公開密鑰加密)褂乍。
對(duì)稱加密:
對(duì)稱加密的意思就是,加密數(shù)據(jù)用的密鑰屡拨,跟解密數(shù)據(jù)用的密鑰是一樣的。
優(yōu)點(diǎn):對(duì)稱加密的優(yōu)點(diǎn)在于加密呀狼、解密效率通常比較高。缺點(diǎn)在于绝编,數(shù)據(jù)發(fā)送方貌踏、數(shù)據(jù)接收方需要協(xié)商、共享同一把密鑰哩俭,并確保密鑰不泄露給其他人。此外砸捏,對(duì)于多個(gè)有數(shù)據(jù)交換需求的個(gè)體隙赁,兩兩之間需要分配并維護(hù)一把密鑰,這個(gè)帶來的成本基本是不可接受的伞访。
非對(duì)稱加密
非對(duì)稱加密的意思就是,加密數(shù)據(jù)用的密鑰(公鑰)厚掷,跟解密數(shù)據(jù)用的密鑰(私鑰)是不一樣的。
什么叫做公鑰呢田绑?其實(shí)就是字面上的意思——公開的密鑰抡爹,誰都可以查到。因此非對(duì)稱加密也叫做公開密鑰加密欧穴。
相對(duì)應(yīng)的,私鑰就是非公開的密鑰涮帘,一般是由網(wǎng)站的管理員持有笑诅。
公鑰映屋、私鑰兩個(gè)有什么聯(lián)系呢同蜻?
簡(jiǎn)單的說就是湾蔓,通過公鑰加密的數(shù)據(jù),只能通過私鑰解開默责。通過私鑰加密的數(shù)據(jù)咸包,只能通過公鑰解開。
很多同學(xué)都知道用私鑰能解開公鑰加密的數(shù)據(jù)媒熊,但忽略了一點(diǎn)坟比,私鑰加密的數(shù)據(jù),同樣可以用公鑰解密出來葛账。而這點(diǎn)對(duì)于理解HTTPS的整套加密、授權(quán)體系非常關(guān)鍵菲宴。
舉個(gè)例子
- 登陸用戶:小明
- 授權(quán)網(wǎng)站:某知名社交網(wǎng)站(以下簡(jiǎn)稱XX)
小明是某知名社交網(wǎng)站XX的用戶趋急,XX出于安全考慮在登陸的地方用了非對(duì)稱加密。小明在登陸界面敲入賬號(hào)愈犹、密碼闻丑,點(diǎn)擊“登陸”。于是嗦嗡,瀏覽器利用公鑰對(duì)小明的賬號(hào)密碼進(jìn)行了加密,并向XX發(fā)送登陸請(qǐng)求叁执。XX的登陸授權(quán)程序通過私鑰,將賬號(hào)谈宛、密碼解密,并驗(yàn)證通過窑滞。之后恢筝,將小明的個(gè)人信息(含隱私),通過私鑰加密后撬槽,傳輸回瀏覽器。瀏覽器通過公鑰解密數(shù)據(jù)侄柔,并展示給小明。
- 步驟一: 小明輸入賬號(hào)密碼 --> 瀏覽器用公鑰加密 --> 請(qǐng)求發(fā)送給XX
- 步驟二: XX用私鑰解密勋磕,驗(yàn)證通過 --> 獲取小明社交數(shù)據(jù)敢靡,用私鑰加密 --> 瀏覽器用公鑰解密數(shù)據(jù),并展示赶站。
用非對(duì)稱加密纺念,就能解決數(shù)據(jù)傳輸安全的問題了嗎?前面特意強(qiáng)調(diào)了一下烙博,私鑰加密的數(shù)據(jù),公鑰是可以解開的渣窜,而公鑰又是公開的宪躯。也就是說,非對(duì)稱加密只能保證單向數(shù)據(jù)傳輸?shù)陌踩浴?br> 此外详瑞,還有公鑰如何分發(fā)/獲取的問題掂林。下面會(huì)對(duì)這兩個(gè)問題進(jìn)行進(jìn)一步的探討泻帮。
公開密鑰加密的問題
從前面小明登陸社交網(wǎng)站XX的例子可以看出兩個(gè)問題
問題1:公鑰如何獲刃趟场饲常?
瀏覽器是怎么獲得XX的公鑰的狼讨?當(dāng)然,小明可以自己去網(wǎng)上查播聪,XX也可以將公鑰貼在自己的主頁布隔。然而衅檀,對(duì)于一個(gè)動(dòng)不動(dòng)就成敗上千萬的社交網(wǎng)站來說,會(huì)給用戶造成極大的不便利哀军,畢竟大部分用戶都不知道“公鑰”是什么東西。
這里要涉及兩個(gè)非常重要的概念:證書谎倔、CA(證書頒發(fā)機(jī)構(gòu))猿推。
證書
可以暫時(shí)把它理解為網(wǎng)站的身份證。這個(gè)身份證里包含了很多信息藕咏,其中就包含了上面提到的公鑰具垫。也就是說,當(dāng)小明筝蚕、小王铺坞、小光等用戶訪問XX的時(shí)候济榨,再也不用滿世界的找XX的公鑰了擒滑。當(dāng)他們?cè)L問XX的時(shí)候,XX就會(huì)把證書發(fā)給瀏覽器丐一,告訴他們說淹冰,乖,用這個(gè)里面的公鑰加密數(shù)據(jù)樱拴。
這里有個(gè)問題,所謂的“證書”是哪來的晶乔?這就是下面要提到的CA負(fù)責(zé)的活了。
CA(證書頒發(fā)機(jī)構(gòu))
強(qiáng)調(diào)兩點(diǎn):
可以頒發(fā)證書的CA有很多(國內(nèi)外都有)阵漏。
只有少數(shù)CA被認(rèn)為是權(quán)威腺怯、公正的,這些CA頒發(fā)的證書虑乖,瀏覽器才認(rèn)為是信得過的。比如VeriSign晾虑。(CA自己偽造證書的事情也不是沒發(fā)生過疹味。。帜篇。)
證書頒發(fā)的細(xì)節(jié)這里先不展開糙捺,可以先簡(jiǎn)單理解為,網(wǎng)站向CA提交了申請(qǐng)笙隙,CA審核通過后洪灯,將證書頒發(fā)給網(wǎng)站,用戶訪問網(wǎng)站的時(shí)候竟痰,網(wǎng)站將證書給到用戶签钩。
至于證書的細(xì)節(jié)掏呼,這里不做贅述。
問題2:數(shù)據(jù)傳輸僅單向安全
公鑰加密的數(shù)據(jù)铅檩,只有私鑰能解開,于是小明的賬號(hào)拾给、密碼是安全了蒋得,半路不怕被攔截窄锅。
然后有個(gè)很大的問題:私鑰加密的數(shù)據(jù)追驴,公鑰也能解開。加上公鑰是公開的暇咆,小明的隱私數(shù)據(jù)相當(dāng)于在網(wǎng)上換了種方式裸奔。(中間代理服務(wù)器拿到了公鑰后扯旷,毫不猶豫的就可以解密小明的數(shù)據(jù))钧忽。
上面提到耸黑,通過私鑰加密的數(shù)據(jù)大刊,可以用公鑰解密還原缺菌。那么另患,這是不是就意味著昆箕,網(wǎng)站傳給用戶的數(shù)據(jù)是不安全的鹏倘?
答案是:是O吮谩!9(三個(gè)嘆號(hào)表示強(qiáng)調(diào)的三次方)
看到這里循狰,可能你心里會(huì)有這樣想:用了HTTPS绪钥,數(shù)據(jù)還是裸奔程腹,這么不靠譜跪楞,還不如直接用HTTP來的省事甸祭。但是池户,為什么業(yè)界對(duì)網(wǎng)站HTTPS化的呼聲越來越高呢赊抖?這明顯跟我們的感性認(rèn)識(shí)相違背啊氛雪。
因?yàn)椋篐TTPS雖然用到了公開密鑰加密报亩,但同時(shí)也結(jié)合了其他手段弦追,如對(duì)稱加密劲件,來確保授權(quán)、加密傳輸?shù)男时榉场踩浴?/p>
概括來說,整個(gè)簡(jiǎn)化的加密通信的流程就是:
1.小明訪問XX拐云,XX將自己的證書給到小明(其實(shí)是給到瀏覽器,小明不會(huì)有感 知)
2.瀏覽器從證書中拿到XX的公鑰A
3.瀏覽器生成一個(gè)只有自己自己的對(duì)稱密鑰B薇缅,用公鑰A加密泳桦,并傳給XX(其實(shí)是-有協(xié)商的過程灸撰,這里為了便于理解先簡(jiǎn)化)
4.XX通過私鑰解密完疫,拿到對(duì)稱密鑰B
5.瀏覽器壳鹤、XX 之后的數(shù)據(jù)通信芳誓,都用密鑰B進(jìn)行加密
注意:對(duì)于每個(gè)訪問XX的用戶兆沙,生成的對(duì)稱密鑰B理論上來說都是不一樣的葛圃。比如小明、小王厘唾、小光喷楣,可能生成的就是B1、B2曲伊、B3
總結(jié):雖然作為前端開發(fā),對(duì)于http可以不用理解的那么深懈糯。但是對(duì)于這些基本原理還是需要懂的届腐。HTTP的入門書推薦圖解HTTP,里面的內(nèi)容很生動(dòng)形象围详。