HTTPS加密流程

HTTPS

HTTPS就是在HTTP基础上进行了一层加密. 目的是防止运营商劫持.

明文 + 密钥 => 密文

密文 + 密钥 => 明文

有的场景加密和解密使用的是相同的密钥, 称为"对称加密".

有的场景加密和解密使用的是不同的密钥, 称为"非对称加密".

什么是不同的密钥?

生成一对密钥分别称为"公钥"和"私钥", 就可以使用公钥来加密, 私钥来解密; 也可以使用私钥来加密, 公钥解密.

工作过程

加密的方式有很多, 但是整体可以分成两大类: 对称加密非对称加密

对称加密

最简单的保证安全的做法就是引入对称密钥, 针对传输的数据(HTTP的header和body)进行加密.

在这里插入图片描述

引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道请求的真实内容是啥了.

服务器同一时刻其实是给很多客户端提供服务的. 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了, 黑客就也能拿到了). 因此服务器就需要维护每个客户端和每个密钥之间的关联关系

比较理想的做法, 就是能在客户端和服务器建立连接的时候, 双方协商确定这次的密钥是什么.

但是如果直接把密钥明文传输, 那么黑客也就能获得密钥了, 此时后续的加密操作就形同虚设了.

因此密钥的传输也必须加密传输!

此时如果使用对称加密 针对刚才的对称密钥 进行加密, 那这个新的对称密钥又会明文传输, 还是不安全 所以还是得加密…这就形成一个循环了.

怎么解决这样的问题呢?

就需要引入非对称加密

非对称加密

在这里插入图片描述

  • 服务器生成一对密钥, 公钥和私钥. 私钥自己使用, 公钥发给客户端.

  • 客户端获取到公钥, 就可以使用公钥加密对称密钥了

    • 此对称密钥是客户端自己生成的
  • 即使黑客拿到了公钥, 他也不知道私钥, 也无法解密, 无法知道对称密钥. 因为使用公钥加密就必须用私钥解密.

  • 服务器知道了对称密钥之后, 以后客户端和服务器之间就可以通过对称密钥进行通信了

⚠此处使用非对称密钥只是用来针对对称密钥进行加密, 而不会加密http的header和body, 后续数据的加密还是使用对称加密的. 因为非对称加密运算量很大, 效率比较低, 对称加密运算量小, 效率更高.

这样就有效进行加密了.

但是上述过程还存在一个严重的问题->中间人攻击

黑客通过中间人攻击的方式仍然能够拿到对称密钥.

什么是中间人攻击? 举个具体的例子

首先服务器生成了一对公钥私钥, 设为pub1和pri1, 然后将pub1传输给客户端.

传输的过程中, 经过了黑客的设备, 黑客自己生成了一对pub2和pri2, 将pub2传输给客户端.

客户端以为pub2是服务器发来的, 就直接使用pub2加密对称密钥, 然后把密文传回给服务器

黑客就可以使用pri2将密文解密, 得到了对称密钥. 然后再使用pub1对对称密钥进行加密, 然后继续把新密文传输给服务器.

服务器使用pri解密, 拿到对称密钥. 服务器以为这个数据是客户端传输的, 因此后续就是用此对称密钥进行交流了.

如何破解中间人攻击?

让客户端能确认收到的公钥是服务器返回的而不是黑客伪造的.

那就需要引入证书机制

需要有一个第三方的认证机构, 通过第三方机构作保, 来确认当前的公钥是有效的.

证书机制

服务器如果像提供服务, 就得先去第三方机构申请证书, 第三方机构就会审核这个服务器的资质, 审核通过就可以颁发证书.

在这个证书里就会包含很多属性. 比如网站的域名, 证书过期时间, 公钥, 数字签名…

  • 公钥: 申请证书的时候, 就会把公钥发给机构
  • 数字签名: 针对上述数据进行的一个验证的机制. 公证机构在生成证书的时候, 会先针对其他的属性生成校验和. 公证机构还会使用自己的私钥针对上述的校验和进行加密. 加密后就形成了数字签名.

客户端向服务器发出建立连接的请求后, 服务器返回证书(结构化的字符串).

客户端拿到证书之后, 就会对证书进行验证.

  • 判定证书的有效期是否过期

  • 判定证书的发布机构是否受信任(操作系统中已内置的受信任的证书发布机构).

  • 验证证书是否被篡改: 使用公钥对数字签名进行解密, 得到了明文, 接下来, 客户端就会按照同样的算法再算一次校验和, 和证书中解密出来的校验和对比. 看看有 没有被黑客篡改.

    • 第三方机构还有公钥, 会分发给其他的各种设备. 不是通过网络传输的, 而是直接使系统内置的. 客户端安装了windows系统, 系统里就会内置各种知名公正机构的公钥. 因此黑客就没法对这个环节进行攻击.

其实到了这一步, 黑客仍然有办法, 它可以把自己伪装成认证机构, 骗客户端安装自己的公钥, 此时就可以光明正大的替换掉数字签名.

公钥不仅仅可以是内置的, 还可以下载安装.

fiddler能够抓包, 本质上就是安装了fiddler的公钥, 让fiddler成为了一个认证机构, 因此fiddler就可以对浏览器传输的数据进行合法的中间人攻击了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是布谷阿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值