用 RSA 和 AES 对接口进行加密
对浏览器或者 APP 进行抓包的时候,请求体和响应体都会暴露在抓包工具下,为了提高抓包的成本,可以对请求体和相应体进行 AES 加密,服务端在发送数据时,都使用相同的 AES Secret 对数据进行加密,收到数据后,再用 AES Secret 进行解密。
如果 AES Secret 被轻松截获,那么加密也就很容易破解,所以 AES Secret 必须是经常变化、而且可以为不同的用户生成不同的 Secret , 关于 Secret 的生成,可以在服务器设计一些逻辑去处理。但是当用户打开页面或者登录 APP 时,如何安全的从服务器获取新生成的 AES Secret 呢?
比较好的解决方案则是用客户端 RSA 密钥来保护 AES Secret ,具体流程如下
- 用户打开网页 或 APP
- 调用 API 之前,先通过
window.crypto
或者keyStore
去生成KeyPair
- 将
KeyPair
的公钥导出,发送给服务器 - 服务器生成 AES Secret ,并且用客户端发来的公钥对 Secret 进行加密并返回
- 客户端收到加密的 Secret 后,用之前生成的
KeyPair
的私钥解密获取 Secret - 客户端拿到 AES Secret ,与服务器使用 AES Secret 进行加密通信