https简述
協(xié)議棧
https是在http應(yīng)用層和tcp傳輸層之間加入了一個(gè)安全層(SSL、TLS) ,加入安全層的主要目的是將傳輸內(nèi)容加解密,這樣就避免了傳輸內(nèi)容被竊聽后,泄露重要信息(如用戶名、密碼),加密后即便被竊聽,竊聽者得到的也是無用的密文(因?yàn)楦`聽者沒有解密密鑰)。
?
https執(zhí)行邏輯
我們知道了https主要就是用來加密傳輸數(shù)據(jù)的(防止被竊聽),那么他是如何進(jìn)行加密、解密的呢?如下圖所示,當(dāng)client發(fā)送https請求時(shí),client不會(huì)像http那樣(先建立tcp)直接將url發(fā)送至server,發(fā)送url屬于正式數(shù)據(jù)的傳輸,而https要保證數(shù)據(jù)傳輸?shù)募用堋K?#xff0c;在tcp建立之后,在正式http請求(發(fā)送url)之前,會(huì)有一個(gè)ssl的握手過程,該過程就是安全套接字要完成的:
首先client會(huì)發(fā)送其支持的加密算法等信息;
server收到請求后選擇加密算法算法,然后隨同證書一起發(fā)送給client;
client收到響應(yīng)后,先進(jìn)行證書認(rèn)證(認(rèn)證會(huì)驗(yàn)證證書是否過期、域名是否一致,最主要的是驗(yàn)證發(fā)送證書的人是不是證書的持有人,CA簽發(fā)的證書都會(huì)先使用hash摘要,然后使用私鑰簽名,通過CA的公鑰和hash就可以驗(yàn)證簽名),生成一個(gè)隨機(jī)數(shù)并保存,然后使用證書上的公鑰(申請證書時(shí),server生成的)加密該隨機(jī)數(shù)后發(fā)送至server;
server收到加密后的隨機(jī)數(shù)后,使用私鑰(申請證書時(shí),server生成的)將其解密并保存;
(此時(shí)雙方已經(jīng)持有安全通信的必要信息(對稱加密算法、隨機(jī)數(shù)密鑰),可以進(jìn)行安全通信了)
加密url等數(shù)據(jù),進(jìn)行正式的http請求;
server收到http請求后,會(huì)由安全層使用之前握手生成的隨機(jī)密鑰解密數(shù)據(jù),然后上傳至http應(yīng)用層(此時(shí)就是普通的http信息了),server響應(yīng)時(shí),同樣會(huì)經(jīng)過安全層加密,然后發(fā)送給client;
client接收到請求響應(yīng)后,安全層使用之前握手生成的隨機(jī)密鑰解密響應(yīng)內(nèi)容,然后傳給應(yīng)用層,至此一次完整的https請求就結(jié)束了。
?
https證書屬性
https的證書遵循X.509標(biāo)準(zhǔn),會(huì)包含許多屬性,如下列屬性,簽名算法、哈希算法、公鑰就可以驗(yàn)證證書有沒有被篡改(即驗(yàn)證發(fā)送證書的人是不是證書的持有人)。類似12306這樣使用自己制作的證書,如果自己可以保證證書本身的安全性,其實(shí)和CA頒發(fā)的證書在數(shù)據(jù)傳輸安全性方面沒有差別。如果無法保證證書的安全性,就無法保證數(shù)據(jù)傳輸安全性了。比如私鑰泄露(別人就可以使用私鑰偽造證書了)、泄露出相同域名不同ip的另一份證書,從而可以進(jìn)行dns劫持。
?
?
?
https性能
看來https的握手過程還是蠻復(fù)雜的,來看一下https的性能到底怎么樣,下圖是打開一個(gè)https網(wǎng)站時(shí)間消耗情況,Initial connection就是tcp+ssl=50ms,ssl為25ms,可見ssl與tcp的耗時(shí)相當(dāng)(略高)。
?
轉(zhuǎn)載于:https://www.cnblogs.com/holoyong/p/7296292.html
總結(jié)
- 上一篇: 计算机基础中的分层教学,分层教学法在计算
- 下一篇: 使用sklearn不同方法在digits