一文看懂https如何保证数据传输的安全性的
原文地址:?https://www.cnblogs.com/kubidemanong/p/9390021.html
大家都知道,在客戶端與服務(wù)器數(shù)據(jù)傳輸?shù)倪^程中,http協(xié)議的傳輸是不安全的,也就是一般情況下http是明文傳輸?shù)?。但https協(xié)議的數(shù)據(jù)傳輸是安全的,也就是說https數(shù)據(jù)的傳輸是經(jīng)過加密。
在客戶端與服務(wù)器這兩個(gè)完全沒有見過面的陌生人交流中,https是如何保證數(shù)據(jù)傳輸?shù)陌踩缘哪?#xff1f;
下面我將帶大家一步步了解https是如何加密才得以保證數(shù)據(jù)傳輸?shù)陌踩缘摹N覀兿劝芽蛻舳朔Q為小客,服務(wù)器稱為小服。然后一步步探索在小客與小服的交流中(就是一方請(qǐng)求一方響應(yīng)),https是如何保證他們的交流不會(huì)被中間人竊聽的。
1. 對(duì)稱加密
假如現(xiàn)在小客與小服要進(jìn)行一次私密的對(duì)話,他們不希望這次對(duì)話內(nèi)容被其他外人知道??墒?#xff0c;我們平時(shí)的數(shù)據(jù)傳輸過程中又是明文傳輸?shù)?#xff0c;萬一被某個(gè)黑客把他們的對(duì)話內(nèi)容給竊取了,那就難受了。
為了解決這個(gè)問題,小服這家伙想到了一個(gè)方法來加密數(shù)據(jù),讓黑客看不到具體的內(nèi)容。該方法是這樣子的:
在每次數(shù)據(jù)傳輸之前,小服會(huì)先傳輸小客一把密鑰,然后小服在之后給小客發(fā)消息的過程中,會(huì)用這把密鑰對(duì)這些消息進(jìn)行加密。小客在收到這些消息后,會(huì)用之前小服給的那把密鑰對(duì)這些消息進(jìn)行解密,這樣,小客就能得到密文里面真正的數(shù)據(jù)了。如果小客要給小服發(fā)消息,也同樣用這把密鑰來對(duì)消息進(jìn)行加密,小服收到后也用這把密鑰進(jìn)行解密。 這樣,就保證了數(shù)據(jù)傳輸?shù)陌踩浴H鐖D所示:
這時(shí),小服想著自己的策咯,還是挺得意的。
可是,這時(shí)候問題來了。這個(gè)策略安全的前提是,小客擁有小服的那把密鑰??蓡栴}是,小服是以明文的方式把這把密鑰傳輸給小客的,這個(gè)時(shí)候,如果黑客截取了這把密鑰,那就難受了。小服與小客就算是加密了內(nèi)容,在截取了密鑰的黑客老哥眼里,這和明文沒啥區(qū)別。
2. 非對(duì)稱加密
小服還是挺聰明的,得意了一會(huì)之后,小服意識(shí)到了密鑰會(huì)被截取這個(gè)問題。倔強(qiáng)的小服又想到了另外一種方法:用非對(duì)稱加密的方法來加密數(shù)據(jù)。該方法是這樣的:
小服和小客都擁有兩把鑰匙,一把鑰匙的公開的(全世界都知道也沒關(guān)系),稱之為公鑰;而另一把鑰匙是保密(也就是只有自己才知道),稱之為私鑰。并且,用公鑰加密的數(shù)據(jù),只有對(duì)應(yīng)的私鑰才能解密;用私鑰加密的數(shù)據(jù),只有對(duì)應(yīng)的公鑰才能解密。
所以在傳輸數(shù)據(jù)的過程中,小服在給小客傳輸數(shù)據(jù)的過程中,會(huì)用小客給他的公鑰進(jìn)行加密,然后小客收到后,再用自己的私鑰進(jìn)行解密。小客給小服發(fā)消息的時(shí)候,也一樣會(huì)用小服給他的公鑰進(jìn)行加密,然后小服再用自己的私鑰進(jìn)行解密。 這樣,數(shù)據(jù)就能安全著到達(dá)雙方。如圖:
想著這么復(fù)雜的策略都能想出來,小服可是得意的不能在得意了.....
看著那么得意的小服,小客這時(shí)心情就不得好了。還沒等小服得意多久,小客就給它潑了一波冷水了。
小客嚴(yán)肅著說:其實(shí),你的這種方法也不是那么的安全啊。還是存在被黑客截取的危險(xiǎn)啊。例如:
你在給我傳輸公鑰的過程中,如果黑客截取了你的公鑰,并且拿著自己的公鑰來冒充你的公鑰來發(fā)給我。我收到公鑰之后,會(huì)用公鑰進(jìn)行加密傳輸(這時(shí)用的公鑰實(shí)際上是黑客的公鑰)。黑客截取了加密的消息之后,可以用他自己的私鑰來進(jìn)行解密來獲取消息內(nèi)容。然后在用你(小服)的公鑰來對(duì)消息進(jìn)行加密,之后再發(fā)給你(小服)。 這樣子,我們的對(duì)話內(nèi)容還是被黑客給截取了啊。(倒過來小客給小服傳輸公鑰的時(shí)候也一樣)。
我靠,這么精妙的想法居然也不行,小服這波,滿臉無神。
## 插講下 ##
其實(shí)在傳輸數(shù)據(jù)的過程中,在速度上用對(duì)稱加密的方法會(huì)比非對(duì)稱加密的方法快很多。所以在傳輸數(shù)據(jù)的時(shí)候,一般不單單只用非對(duì)稱加密這種方法(我們先假設(shè)非對(duì)稱密碼這種方法很安全),而是會(huì)用非對(duì)稱加密 + 對(duì)稱加密這兩種結(jié)合的方法。 你想啊,對(duì)于對(duì)稱加密這種方法來說,之所以不安全是因?yàn)?strong>密鑰在傳輸?shù)倪^程中,被別人知道了。基于這個(gè),我們可以用非對(duì)稱加密方法來安全著傳輸密鑰,之后在用對(duì)稱加密的方法來傳輸消息內(nèi)容(當(dāng)然,我這里假定了非對(duì)稱加密傳輸是安全的,下面會(huì)講如何使之安全)。
數(shù)字證書
我們回頭想一下,是什么原因?qū)е?strong>非對(duì)稱加密這種方法的不安全性呢?它和對(duì)稱加密方法的不安全性不同。非對(duì)稱加密之所以不安全,是因?yàn)樾】褪盏搅斯€之后,無法確定這把公鑰是否真的是小服。
也就是說,我們需要找到一種策略來證明這把公鑰就是小服的,而不是別人冒充的。
為了解決這個(gè)問題,小服和小客通過絞盡腦汁想出了一種終極策略:數(shù)字證書:
我們需要找到一個(gè)擁有公信力、大家都認(rèn)可的認(rèn)證中心(CA)
小服再給小客發(fā)公鑰的過程中,會(huì)把公鑰以及小服的個(gè)人信息通過Hash算法生成消息摘要。如圖:
為了防止摘要被人調(diào)換,小服還會(huì)用CA提供的私鑰對(duì)消息摘要進(jìn)行加密來形成數(shù)字簽名。如圖:
并且,最后還會(huì)把原來沒Hash算法之前的信息和數(shù)字簽名合并在一起,形成數(shù)字證書。如圖:
當(dāng)小客拿到這份數(shù)字證書之后,就會(huì)用CA提供的公鑰來對(duì)數(shù)字證書里面的數(shù)字簽名進(jìn)行解密得到消息摘要,然后對(duì)數(shù)字證書里面小服的公鑰和個(gè)人信息進(jìn)行Hash得到另一份消息摘要,然后把兩份消息摘要進(jìn)行對(duì)比,如果一樣,則證明這些東西確實(shí)是小服的,否則就不是。如圖:
這時(shí)可能有人會(huì)有疑問,CA的公鑰是怎么拿給小客的呢?小服又怎么有CA的私鑰呢?其實(shí),(有些)服務(wù)器在一開始就向認(rèn)證中心申請(qǐng)了這些證書,而客戶端里,也會(huì)內(nèi)置這些證書。如圖(此圖來元阮一峰的網(wǎng)絡(luò)日志)
當(dāng)客戶端收到服務(wù)器返回來的數(shù)據(jù)時(shí),就會(huì)在內(nèi)置的證書列表里,查看是否有有解開該數(shù)字證書的公鑰,如果有則.....否則.....
講到這里,就大概結(jié)束了。希望對(duì)你有所幫助勒。如果有哪里寫得不對(duì)的地方,歡迎大家指出。
總結(jié)
以上是生活随笔為你收集整理的一文看懂https如何保证数据传输的安全性的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue ...mapMutations
- 下一篇: Django之路--第一篇