RSA 签名对接

相比 MD5,RSA 签名下您的私钥无需随请求参与运算摘要,即使请求被截获也无法伪造新签名,安全性更高。已在商户中心上传 RSA 公钥的商户即可使用。

前置准备

1. 生成您自己的 RSA 2048 密钥对(openssl 示例):

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out merchant_private.pem
openssl pkey -in merchant_private.pem -pubout -out merchant_public.pem

2. 登录商户中心 → 商户信息 → 粘贴 merchant_public.pem 内容保存;
3. 在同一页面复制平台公钥,用于验证平台发给您的异步通知签名。

请求签名

1. 与 MD5 相同:过滤空值与 sign/sign_type,参数名 ASCII 升序,拼为 a=b&c=d(值不做 URL 编码);
2. 用您的私钥对该排序串做 RSA-SHA256(PKCS1v15) 签名,Base64 编码后作为 sign;
3. 请求携带 sign_type=RSA。

openssl dgst -sha256 -sign merchant_private.pem -out sig.bin sorted_string.txt
sign=$(base64 -w 0 sig.bin)

验证平台通知

平台异步通知会带 sign_type=RSA 与 sign(平台私钥签名)。验证方式:按相同排序规则构造串,用平台公钥做 RSA-SHA256 验签:

openssl dgst -sha256 -verify platform_public.pem -signature sig.bin sorted_string.txt
# 输出 Verified OK 即签名有效
两种签名方式可共存:未携带 sign_type=RSA 的请求仍按 MD5 校验;清除商户公钥即整体回落 MD5。平台公钥可在商户中心-商户信息页随时复制。