浅析https加密机制

1.对称加密的缺陷

对称加密算法的加密和解密都是用同一个密钥。

首先当通信双方各自持有同一个秘钥且没有人知道也没有被破解,则通信双方的安全通信是可以保证的。但是在服务器端向客户端发送密钥的时候,中途可能被别人劫持,导致泄密。
如果浏览器内部预存了网站A的密钥,且可以确保除了浏览器和网站A,不会有任何外人知道该密钥,那理论上用对称加密是可以的。那么若浏览器只要预存了世界上所有https网址的密钥就可以了,但是这样是不现实的

因此就需要使用非对称加密来解决这个问题。

2.非对称加密

非对称加密算法需要一组密钥对,分别是公钥和私钥,这两个密钥是成对出现的。公钥加密的内容需要对应的私钥解密,私钥加密的内容需要对应的公钥解密。私钥由服务器自己保存公钥发送给客户端。客户端拿到公钥后可以对请求进行加密后发送给服务端,这时候就算中间被截获,没有私钥也无法解密发送的内容,这样确保了客户端发送到服务端数据的安全。

但是,若通信双方采用两组非对称密钥,是非常消耗性能及时间的,因此可以采用非对称加密+对称加密的方式实现安全通信。
在这里插入图片描述
3.非对称加密 + 对称加密(非对称加密、解密各只需一次的方法)

  1. 某网站拥有用于非对称加密的公钥A1、私钥A2。
  2. 浏览器向网站服务器请求,服务器把公钥A1明文给传输浏览器。
  3. 浏览器随机生成一个用于对称加密的密钥X,用公钥A1加密后传给服务器。
  4. 服务器拿到后用私钥A2解密得到密钥X。

这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都用密钥X加密解密即可。但是还是有漏洞,中间人可以替换公钥进行数据截获替换

4.中间人攻击

  1. 某网站拥有用于非对称加密的公钥A1、私钥A2。
  2. 浏览器向网站服务器请求,服务器把公钥A1明文传输给浏览器。
  3. 中间人劫持到公钥A1,保存下来,把数据包中的公钥A1替换成自己伪造的公钥B1(它当然也拥有公钥B1对应的私钥B2)。
  4. 浏览器随机生成一个用于对称加密的密钥X,用公钥B1(浏览器不知道公钥被替换了)加密后传给服务器。
  5. 中间人劫持后用私钥B2解密得到密钥X,再用公钥A1加密后传给服务器。
  6. 服务器拿到后用私钥A2解密得到密钥X。

这样在双方都不会发现异常的情况下,中间人得到了对称密钥X。根本原因是浏览器无法确认自己收到的公钥是不是网站自己的

5.数字证书

那么如何证明浏览器收到的公钥一定就是该网站的公钥呢?
这里就需要像人的身份证(权威机构颁发)一样能证明此人的信息。
所以网站在使用HTTPS前,需要向“CA机构”申请颁发一数字证书数字证书里有证书持有者、证书持有者的公钥等信息。服务器把证书传输给浏览器,浏览器从证书里取公钥就可以了。

然而由于目前“社会”造假严重,证书本身的传输过程中,如何防止被篡改?即如何证明证书本身的真实性?数字证书怎么防伪呢?

这个时候就需要拿此证的人进行签名,签名是具有法律效益的,可不能随便乱签哟!

6.数字签名

因此可以把证书内容生成一份“签名”,比对证书内容和签名是否一致就能察觉是否被篡改。这种技术就叫数字签名。

下图中左侧是数字签名的制作过程,右侧是浏览器验证过程。
在这里插入图片描述
数字签名的制作过程:

  • CA拥有非对称加密的私钥和公钥。
  • CA对证书明文信息进行hash。
  • 对hash后的值用私钥加密,得到数字签名。

明文和数字签名共同组成了数字证书。

浏览器验证过程:

  • 拿到证书,得到明文T1,数字签名S1。
  • 用CA机构的公钥对S1解密(由于是浏览器信任的机构,所以浏览器保有它的公钥),得到S2。
  • 用证书里说明的hash算法对明文T1进行hash得到T2。
  • 比较S2是否等于T2,等于则表明证书可信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值