https 能够支持接口安全传输,但在 web 场景下,用户通过 F12 控台可以轻松获取请求的参数和响应结果,这可能被黑客利用,从而破解接口并进行非法利用。
所以本文的目标是:提供一种对数据请求/响应数据的加解密方案,增加破解门槛,提高接口安全性。
此方案将参考 https 基于 RSA + AES 的加密思路。
https 基于 RSA + AES 的加密方案,方案的大致流程是:
TLS 握手,使用 RSA 交换 AES 会话密钥
Client 使用 AES 会话密钥加密 HTTP 请求
Server 使用 AES 会话密钥加密 HTTP 响应
该方案会参考 HTTPS 的加解密流程。
通过对请求参数和 RSA 公钥执行摘要算法,可以得到一个签名 sign,server 可以通过 sign 验证数据包是否被篡改,签名是保证接口安全性的一个必要环节。
基本上签名可由以下参数构成:
query_param:拼接在 url 中的一系列查询参数(get)
form_data:request body 中的的请求数据(post)
timestamp:时间戳,一定程度上避免请求重放,或限制过期请求
RSA 公钥:此公钥参与 sing 的生成,server 持有相同公钥
client 将这些参数按照固定顺序拼接并通过诸如 md5、sha 等摘要算法生成 sign,server 以同样的方式生成 sign',并比较是否和 sign 一致从而达到验签的目的
server 负责生成 RSA pub_key(当 pub_key 变更的时候,同时持有当前 pub_key 和上一个 pub_key,保证变更时可用性)