https加密原理-为什么说https能保证数据安全

学习思路

  1. 名词解释
  2. https实现原理
  3. 实际中我们应该怎么设计对外暴露接口

一、名词解释

对称加密:客户端和服务端公用一个秘钥,既可以进行加密操作也可以进行解密操作,常见的对称加密算法如:AES等

  1. 优点:算法公开、加解密速度相对较快等
  2. 缺点:秘钥对外公开,安全性得不到保障

非对称加密:包含一对秘钥,其中对外暴露公钥,客户端数据公钥加密;服务端保留私钥,解密公钥加密的数据

  1. 优点:公钥私钥成对出现并且只对外暴露公钥,除了私钥拥有者,其它无法解密公钥加密的数据,安全性相对较高
  2. 缺点:对比对称加密,算法复杂,解密效率低,对于数据量大,访问频率高的接口很明显不适合

总结:可以看出当我们想对外暴露接口的时候单纯的使用对称加密、非对称加密都不合适

接下来我们看https是怎么做到安全的

二、https实现原理

一句话总结http:客户端和服务端数据不加密,请求可以被拦截,然后篡改数据模拟访问服务端,具体我们不深入

我们先了解一下三个角色

  1. CA机构:证书授权中心,是电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
  2. 服务端:我们在暴露接口之前首先要先注册证书,然后将证书配置到我们的服务,让我们的服务支持https
  3. 客户端:CA用客户端的私钥加密服务端的公钥(包含:公钥,有效期、域名、签名算法等)生成证书然后内置到客户端(浏览器)

我们来看一下客户端和服务端的交互

https加密原理-为什么说https能保证数据安全_第1张图片

解释:

整个流程分为证书验证和数据传输两步

  1. 浏览器发送https请求到服务端,服务端返回对应证书(公钥、签名算法、有效期等)
  2. 浏览器通过内置证书校验服务器返回证书的有效性,如果校验不通过:提示用户
  3. 如果校验通过,解析得到服务端公钥,生成随机数,然后用服务端公钥加密随机数发送到服务端
  4. 服务端私钥解密得到浏览器生成的随机数,然后以该随机数当做对称加密的秘钥进行对称加密进而数据传输

总结:证书验证有效避免了第三发恶意伪造公钥,第三步确保了对称加密秘钥的安全性,第四步使用对称加密,效率更高

总体下来,即保证了安全性,又提高了传输效率,那是不是有了https就万事大吉了呢、、、

三、抓包篡改数据

用户在正常访问的情况下https数据传输是安全的

但如果用户安装抓包软件并在客户端和抓包软件分别安装证书(用户授权访问)那么就可以将请求中间拦截,然后修改访问数据或者返回数据,这样以来我们就可以通过修改访问参数来进行我们想要的操作

那么有没有办法避免呢,,

四、实际中我们应该怎么设计对外暴露接口

  1. 必须使用https
  2. 给客户端分片AppId,服务端过滤有效防止恶意访问
  3. 和客户端约定验签(将请求参数通过约定排列然后通过摘要算法如MD5生成签名),然后服务端用相同方式生成签名对比
  4. 还可以设置请求的有效时间(请求参数带上当前时间),后台验证本次请求超过一定时间视为过期
  5. 设置白名单,可对ip等进行限制
  6. 为保护后台服务,应设置限流、容错措施,防止服务整体不可用

公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢

 

你可能感兴趣的:(加密,https,加密)