解析HTTPS加密原理
Posted 富春山居_ZYY
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析HTTPS加密原理相关的知识,希望对你有一定的参考价值。
文章目录
HTTPS简单来说,就是HTTP的兄弟,不同的是,
HTTP是明文传输,HTTPS是密文传输
,HTTPS在HTTP的基础上,引入了加密层
SSL/TLS
。
一、背景
HTTP因其明文传输,就导致在传输的过程中,内容就很容易被居心叵测之人改动
运营商劫持
就是因为HTTP是明文传输方便被篡改,在过去的很长一段时间,非常猖狂
劫持的方式种类多
-
某用户想要访问网站A,结果域名却被解析到其他的地址,导致原先想要访问的网站流量受损。更加糟糕的是,如果解析的网站地址是一个钓鱼网站,长得和想要访问的网站极为相似,实际上是假冒网站,从而通过该网站套取用户信息,造成用户损失
类似于,和对象闹别扭,要给对象写和解信,却被王二麻子劫持了,模仿你的笔记,把信改成了分手信,结果就凉凉~
-
在比如说,很多的网站中会弹出很多的不良小广告,用户以为是网站本来就有这样的小广告,靠这挣钱,从而对网站的印象变差,造成网站流量损失。实际上,这也极有可能是运营商劫持手段
除了运营商劫持,黑客也会通过类似的手段悄无声息的进行对信息进行窃取或者篡改。
在这样的背景下,HTTPS诞生了,在HTTP的基础上进行加密。
二、工作过程
名词解释:
- 明文:传输的原始消息
- 密文:经过一定规则变换后的消息内容
- 加密:明文->密文
- 解密:密文->明文
- 密钥:加密解密过程中需要用到的特殊数据
加密大致分为对称加密和非对称加密两种
1. 对称加密
对称加密指的就是加密和解密通过同一个密钥
。
比如按位异或就是一种简单的对称加密
明文:1234
密钥:8888
通过加密,密文为1234^8888,即9834
通过解密,运算得9834^8888,即1234
如果只是简单的用对称加密来对信息加密,就会产生这样的疑问,密钥如何约定?怎么传送?要是密钥在传送的过程中被黑客截获了,那岂不是白加密了?
此时就需要引入非对称加密
2. 非对称加密
非对称加密拥有两个密钥(两者是配对的),即公钥和私钥
,公钥是对外公开的,私钥是自己持有私密
的。用公钥加密,用私钥解密(在其他的使用中,公钥可以用于加密也可以用于解密,私钥可以用于加密也可以用于解密)。
和非对称加密相比,对称加密的成本会更加的低,如果客户端和服务器之间传输的数据量是十分庞大,用非对称加密就会效率低下。因此一般来说,会用对称密钥对信息加密,用非对称密钥对对称密钥进行加密,因为对称密钥比较短。
步骤:
- 服务器生成公钥私钥对,公钥公开,私钥自己持有(保密)
- 客户端获取公钥后,用公钥对对称密钥进行加密,并将其通过网络传输送到服务器
- 由于黑客只知道公钥,不知道私钥,因此无法解密获得对称密钥
- 服务器用私钥解密获取到对称密钥
- 客户端和服务器通过对称密钥进行信息的加密解密
3.中间人攻击
中间人攻击
就相当于狸猫换太子,要知道黑客是知道公钥是什么的,如果在服务器给客户端传送公钥的时候,篡改了公钥,将其换成了自己的公钥,客户端拿到公钥后无法辨别公钥的真伪,就直接用黑客的公钥对对称密钥加密,送给服务器,过程中黑客就可以用自己的私钥将对称密钥获取到,后续在将对称密钥用服务器的公钥加密,那么就可以瞒天过海,偷偷获取对称密钥。
出现中间人攻击的解决办法就是让客户端正确的识别出获得的公钥是黑客传来的假冒的,还是服务器传来的正确的公钥。
4. 公证机构
为解决中间人攻击,可以引入第三方公证机构
来做证明,服务器在生成公钥私钥对后,给客户端返回一个给公证机构许可过的证书,证书中包含着公钥信息,证书发布机构,证书有效期,证书所有者等等信息,黑客一旦篡改证书中的内容,客户端一拿到公证处一查看,就会露馅,就解决了客户端无法辨别公钥真伪的问题
为了校验证书是否被篡改过,也可以通过非对称加密,服务器在注册证书的时候获得私钥,客户端持有公钥,服务器使用私钥对证书签名进行加密,客户端通过公钥解密获取证书的签名,从而校验证书的内容是否被修改过。
三、HTTPS加密原理总结(重点)
- 对称加密:传输的数据用其加密,客户端生成一对称密钥,需要告知服务器
- 非对称加密:服务器端生成一公钥私钥对,公钥对外开放,私钥服务器自己持有,客户端通过公钥对对称密钥进行加密,密文传给服务器,服务器通过私钥解密获取对称密钥
- 中间人攻击:黑客劫持服务器给客户端的公钥,用自己的公钥替代,从而获取对称密钥,最后获取数据信息
- 为解决中间人攻击,引入证书机制,即第三方公证机构给网站颁发包含着公钥及其他信息的证书,客户端向服务器发出获取证书的请求,拿到证书后,去第三方公证机构验证证书的合法性
完!
以上是关于解析HTTPS加密原理的主要内容,如果未能解决你的问题,请参考以下文章