赞
踩
以SpringBoot为例提高接口安全性,核心无非是:加密和加签
#1.加密
定义:对参数进行加密传输,拒绝接口参数直接暴露,这样就可以有效做到防止别人轻易准确地获取到接口参数定义和传参格式要求了。
加密分为对称加密和非对称加密
AES 是对称加密算法,优点:加密速度快;缺点:如果秘钥丢失,就容易解密密文,安全性相对比较差
RSA 是非对称加密算法 , 优点:安全 ;缺点:加密速度慢;
加密流程:
① 客户端(调用接口方)随机生成AES加解密的密钥aes key,这里的AES密钥每次调接口都需要随机生成,可以有效提高安全性。
② 使用aes key对接口参数requestBody进行加密,data=base64(AES(json参数))
③ 通过RSA加密算法加密aes key,有效保证aes算法的密钥的可靠安全性 key=base64(RSA(aes key))
④ 经过上面的步骤,得到了加密后的业务参数及密钥,这时候就可以发送请求调用接口了
⑤ 服务端接收到请求之后,先通过RSA算法对key进行解密获取到ase key, 再通过aes key解密data得到真正json参数,最后映射到接口方法的参数对象上,供controller的业务方法逻辑使用。
⑥ 业务方法执行完成后,对响应参数进行加密,加密流程和上面的1、2、3一样
⑦ 客户端收到响应参数之后,和步骤5一样解密响应参数,就拿到了真正的数据结果了。
#2.加签
定义:对接口参数进行加签,可以有效防止接口参数被篡改和接口参数被重放恶刷。
核心就是客户端在调用接口时按照一定规则生成签名sign,服务端拿到签名sign之后进行验证操作
流程:
① 对请求参数对象bean转sortMap保证参数拼接的有序性,如果接口没有参数也没有关系,这里转成一个空的sortMap
② 按照约定拼接生成字符串content = sortMap + nonce + timestamp
③ 使⽤SHA1WithRSA算法及私钥对concent进⾏签名sign
④ 服务端判断timestamp是否超过签名有效期和nonce是否重复使用
⑤ 服务端和步骤2一样规则生成字符串content
⑥ 使⽤SHA1WithRSA算法及公钥对concent和sign进行验签
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。