学习思路
- 名词解释
- https实现原理
- 实际中我们应该怎么设计对外暴露接口
一、名词解释
对称加密:客户端和服务端公用一个秘钥,既可以进行加密操作也可以进行解密操作,常见的对称加密算法如:AES等
- 优点:算法公开、加解密速度相对较快等
- 缺点:秘钥对外公开,安全性得不到保障
非对称加密:包含一对秘钥,其中对外暴露公钥,客户端数据公钥加密;服务端保留私钥,解密公钥加密的数据
- 优点:公钥私钥成对出现并且只对外暴露公钥,除了私钥拥有者,其它无法解密公钥加密的数据,安全性相对较高
- 缺点:对比对称加密,算法复杂,解密效率低,对于数据量大,访问频率高的接口很明显不适合
总结:可以看出当我们想对外暴露接口的时候单纯的使用对称加密、非对称加密都不合适
接下来我们看https是怎么做到安全的
二、https实现原理
一句话总结http:客户端和服务端数据不加密,请求可以被拦截,然后篡改数据模拟访问服务端,具体我们不深入
我们先了解一下三个角色
- CA机构:证书授权中心,是电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。
- 服务端:我们在暴露接口之前首先要先注册证书,然后将证书配置到我们的服务,让我们的服务支持https
- 客户端:CA用客户端的私钥加密服务端的公钥(包含:公钥,有效期、域名、签名算法等)生成证书然后内置到客户端(浏览器)
我们来看一下客户端和服务端的交互
解释:
整个流程分为证书验证和数据传输两步
- 浏览器发送https请求到服务端,服务端返回对应证书(公钥、签名算法、有效期等)
- 浏览器通过内置证书校验服务器返回证书的有效性,如果校验不通过:提示用户
- 如果校验通过,解析得到服务端公钥,生成随机数,然后用服务端公钥加密随机数发送到服务端
- 服务端私钥解密得到浏览器生成的随机数,然后以该随机数当做对称加密的秘钥进行对称加密进而数据传输
总结:证书验证有效避免了第三发恶意伪造公钥,第三步确保了对称加密秘钥的安全性,第四步使用对称加密,效率更高
总体下来,即保证了安全性,又提高了传输效率,那是不是有了https就万事大吉了呢、、、
三、抓包篡改数据
用户在正常访问的情况下https数据传输是安全的
但如果用户安装抓包软件并在客户端和抓包软件分别安装证书(用户授权访问)那么就可以将请求中间拦截,然后修改访问数据或者返回数据,这样以来我们就可以通过修改访问参数来进行我们想要的操作
那么有没有办法避免呢,,
四、实际中我们应该怎么设计对外暴露接口
- 必须使用https
- 给客户端分片AppId,服务端过滤有效防止恶意访问
- 和客户端约定验签(将请求参数通过约定排列然后通过摘要算法如MD5生成签名),然后服务端用相同方式生成签名对比
- 还可以设置请求的有效时间(请求参数带上当前时间),后台验证本次请求超过一定时间视为过期
- 设置白名单,可对ip等进行限制
- 为保护后台服务,应设置限流、容错措施,防止服务整体不可用
公众号主要记录各种源码、面试题、微服务技术栈,帮忙关注一波,非常感谢