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