核心逻辑:
后端(持有私钥):生成签名。
前端(持有公钥):只负责验证签名(确保数据没被篡改)+ 发送请求。
后端(接收请求):再次校验签名(防篡改)。
注意 :对于流式接口,通常我们采用**"后端生成临时令牌"** 的模式。
前端先调一个普通接口拿令牌(令牌里包含了后端签名的数据),前端验证通过后,带着令牌去调流式接口。
第一步:生成密钥对
你需要生成一对 RSA 密钥(建议使用 2048 位或 4096 位)。
可以使用在线工具或 OpenSSL 生成:
- 私钥 (Private Key) :绝密,只放在后端代码或配置中心里。
- 公钥 (Public Key):公开,放在前端代码里。
1. 如何生成 RSA 密钥对
最标准、最安全的方法是使用 OpenSSL 工具(Windows/Mac/Linux 均可使用)。如果你没有安装 OpenSSL,也可以使用在线生成工具(但要注意安全风险,建议仅用于测试)。
方法一:使用 OpenSSL 命令行(推荐,最安全)
打开你的终端(Terminal)或命令行工具,依次执行以下命令:
第一步:生成私钥 (2048位)
这是你的核心机密,千万不要泄露。
2. 这种密钥会过期吗?
答案是:会,也不全都会。
我们需要区分两个概念:"算法失效" 和 "密钥轮换"。
A. 算法失效(长期风险)
随着计算机算力的提升(特别是量子计算的发展),曾经安全的密钥长度会变得不安全。
- 1024位:已不再安全,容易被破解。
- 2048位 :目前的行业标准,预计安全期至少到 2030年。
- 4096位:更安全,但计算速度稍慢,适合极高安全要求的场景。
结论:你生成的 2048 位密钥,在未来 5-10 年内是安全的。
B. 密钥轮换(运营风险)
即使密钥本身没有破解风险,你也应该定期更换它。原因如下:
- 防止私钥泄露:万一你的服务器被黑了,或者代码库泄露了,黑客拿到了私钥,他就可以伪造所有请求。定期换密钥可以将损失降到最低。
- 业务隔离:比如"2024年第一季度密钥",过期作废,方便管理。
建议的轮换周期:
- 普通业务 :每 1年 更换一次。
- 高敏感业务(涉及支付) :每 3-6个月 更换一次,或者一旦发现有任何泄露风险立即更换。
sudo yum install openssl -y

openssl genrsa -out private_key.pem 2048

利用刚才生成的私钥,提取出公钥
openssl rsa -in private_key.pem -pubout -out public_key.pem

1. 获取私钥(放在后端配置里):
cat private_key.pem
chmod 600 private_key.pem (安全权限:建议把私钥权限设为只有你能读,防止服务器上其他人偷看)
2. 获取公钥(放在前端代码里):
cat public_key.pem
- 通信安全 :强制使用 HTTPS (TLS) 进行全链路加密,防止网络嗅探。
- 身份认证 :采用 JWT 或 API Key 机制,验证请求发起方的合法身份。
- 数据完整性与来源校验 :采用 RSA-SHA256 数字签名。客户端将业务参数、时间戳、随机数和身份凭证拼接后,使用私钥生成签名,服务端用公钥验签,确保数据未被篡改且来源可信。
- 防重放攻击 :
- 时效性校验 :请求携带 Timestamp,服务端拒绝处理超过有效窗口(如5分钟)的请求。
- 唯一性校验 :请求携带 Nonce,服务端在有效期内(如5分钟)通过 Redis 校验其唯一性,防止请求被重复提交。
- 敏感数据保护 :对金额、密码等核心敏感字段,采用 AES+RSA 混合加密模式,在保证安全的同时兼顾性能。
- 访问控制 :实施 限流 (Rate Limiting) 策略,防止接口被滥用或遭受 DDoS 攻击,保护后端资源和控制成本。