Skip to content

部署不上gitee

首先把一些概念简单提一下

👇 我们先简单的定义网络层(不是理想模型)

可以看出HTTPS并不是取代HTTP的新应用层,HTTP和HTTPS的区别仅仅是中间多了一层协议,其他网络相关的东西是没有区别的

而SSL (安全套接层) 和TLS (安全传输层协议) 的区别是SSL是旧版而TLS是新版而已 本文都用TLS指代HTTPS的协议层

背景

HTTP的数据传输是明文传输的,这里只要抓包就能被偷私密信息,如账号密码,付款密码等


思考🤔: 学习TCP的时候,不是说TCP就是为了保证数据的可靠性吗?TCP保护的是什么?


加密🔐数据来传输可以解决被偷明文数据的问题,那我们用常规的对称加密不就可以了吗?

加密要考虑的是被破也就是 反解密 的问题,对称加密是可以用原数据和加密后数据来反解出密钥🔑的,当然如果我们可以做到不同客户端的密钥🔑都不相同,那黑客不知道你的原数据就没办法反解出你的密钥了

但是,要做到每个客户端的密钥🔑都不相同就不可避免的要传输密钥🔑,因为服务端也不知道不同客户端的密钥🔑是什么 那就又陷入了传输数据被偷的困境


思考🤔: 现在常用的密码JWT转token的加密形式用在数据传输上是不是也可以?


TLS加密协议

如👆 SSL (安全套接层) 和TLS (安全传输层协议) 的区别是SSL是旧版而TLS是新版而已

HTTPS依然通过 原HTTP 来传输信息 但是信息多通过 TLS 协议进行加密

在 TLS 中使用了两种加密技术,分别为:对称加密和非对称加密。

首次进行 TLS 协议传输需要两个 RTT ,接下来可以通过 Session Resumption 减少到一个 RTT。

HTTPS的非对称加密🔒

非对称加密,使用两个不同的密钥:公钥(public key)私钥(private key)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。

RSA算法是非对称加密的核心TODO:

我们用对称加密的反解密思路,黑客通过自己的原数据和加密后数据反解出公钥,黑客拿着公钥去抓包,去解别人用公钥加密的数据,是解不开的😁

优点:加密和解密使用不同的钥匙,传输公钥即可,私钥不需要通过网络进行传输,安全性很高。 缺点:计算量比较大,加密和解密速度相比对称加密慢很多。

结合对称加密提高性能

如👆说的非对称加密的缺点,耗时耗电

那我们结合对称加密和非对称加密不就行了吗,我们用非对称加密来加密我们的对称加密密钥

本文把对称加密的密钥叫做[密钥],非对称加密叫[公钥][私钥]

方案1

  1. 由服务器生成公钥、私钥、密钥
  2. 服务器用私钥对密钥加密
  3. 客户端发起请求
  4. 服务器把加密后的密钥给客户端
  5. 后续双方用加密后密钥加密数据传输

👆 问题出在用了私钥加密数据,只要用公钥就能解开而公钥是作为公开的东西 只要黑客用公钥解开得出密钥就能任意获取客户端发送的数据了 并且可以用反解对称加密的形式,解开用户的数据,不需要解开加密后密钥

方案2

  1. 由服务器生成公钥、私钥、密钥
  2. 服务器用公钥对密钥加密
  3. 客户端发起请求
  4. 服务器把加密后的密钥给客户端
  5. 后续双方用加密后密钥加密数据传输

👆 黑客解不开加密后的密钥,但是黑客拿着加密后的密钥,可以用反解对称加密的形式,解开用户的数据

上诉2种方案的问题都出在,密钥由服务器生成一个唯一的,虽然加密了但是陷入对称加密里一样的问题,所以我们要不同客户端生成不同的密钥,这个步骤交给客户端做 如👇

可以看到这样不可避免的多了一些往返消耗,因为服务器要给客户端公钥,而客户端还要给服务器密钥,才能开始通信

中间人黑客手段

我们现在假设黑客没办法破解出我们和服务器通信的数据了

那作为黑客,我又想出了一个办法

黑客拦截客户端的首次请求,伪装成客户端想要访问的服务器,原本服务器要给客户端返回公钥 黑客伪装成服务器返回一个假的公钥,客户端拿着假的公钥做的操作和通信,都被黑客给自己解开了

HTTPS也要把这种黑客给防掉,而不是让服务器自己解决 这种欺骗客户端的形式,只要让客户端只认自己要请求的服务器就可以了

那服务器怎么证明自己是客户端要访问的对象呢 服务器把一些域名信息给客户端校验就可以了 但是服务器证明自己是自己的信息,也是公开的,那黑客也可以伪装这些信息呀😰

CA机构

证书

完整流程

一个证书多个地方用?自签名?

参考资料

HTTPS是什么?加密原理和证书。SSL/TLS握手过程-技术蛋老师视频HTTPS 详解一:附带最精美详尽的 HTTPS 原理图