网站后台配置支付时,商户私钥和支付宝公钥在哪里获取?
支付小周
明确结论
- 商户私钥不是从支付宝下载的。它是商户自行生成的密钥对中的私钥,由商户保存,用于请求签名,不能上传或泄露。
- 支付宝公钥由支付宝提供。需要先在支付宝开放平台为应用配置”接口加签方式”,上传商户的应用公钥。配置完成后,才能查看并复制支付宝公钥。
这几个概念容易混淆:
- 商户私钥:也叫”应用私钥”。
- 应用公钥:与商户私钥配对,需要上传到支付宝开放平台。
- 支付宝公钥:用于验证支付宝返回数据的签名。
- 支付宝公钥和应用公钥不是同一个公钥,不能混用。
获取商户私钥
建议使用支付宝开放平台提供的密钥工具生成 RSA2 密钥。生成后通常会得到:
应用私钥
应用公钥
配置时需要注意:
- 将”应用私钥”填写到网站后台的”商户私钥”字段。
- 将”应用公钥”上传到支付宝开放平台。
- 不要将应用公钥填入商户私钥字段。
也可以使用 OpenSSL 自行生成:
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out app_private_key.pem
openssl pkey -in app_private_key.pem -pubout -out app_public_key.pem
生成的 app_private_key.pem 是商户私钥,app_public_key.pem 是需要上传到支付宝开放平台的应用公钥。网站后台是否接受包含 PEM 头尾的内容,应以该字段的说明为准。
获取支付宝公钥
登录支付宝开放平台并进入对应应用,然后在开发设置或接口加签方式页面完成配置。应用类型和控制台版本不同,菜单名称可能略有差异,操作流程通常如下:
- 进入需要接入支付的应用。
- 找到”开发设置”、“接口加签方式”或类似入口。
- 选择
RSA2加签方式。 - 上传或填写之前生成的应用公钥。
- 保存配置。
- 配置成功后,在同一页面查看并复制”支付宝公钥”。
- 将其填写到网站后台的”支付宝公钥”字段。
如果采用支付宝公钥证书模式,网站后台要求的可能不是一段支付宝公钥文本,而是以下证书文件:
应用公钥证书
支付宝公钥证书
支付宝根证书
配置前应先确认网站后台使用的是”普通公钥模式”还是”公钥证书模式”。两种模式使用的配置文件不同,不能混用。
配置示例
在普通公钥模式下,配置通常类似:
alipay.app_id=你的支付宝应用APPID
alipay.private_key=你的应用私钥
alipay.alipay_public_key=支付宝公钥
alipay.sign_type=RSA2
alipay.charset=UTF-8
使用支付宝 SDK 时,Java 初始化代码通常如下:
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appId,
merchantPrivateKey,
"json",
"UTF-8",
alipayPublicKey,
"RSA2"
);
这里:
merchantPrivateKey对应商户私钥,也就是应用私钥。alipayPublicKey对应支付宝开放平台显示的支付宝公钥。- 沙箱应用和正式应用使用各自独立的密钥配置,不能混用。
常见问题
页面中看不到支付宝公钥
一般是因为应用还没有完成接口加签配置。先生成密钥对并上传应用公钥,保存成功后再查看支付宝公钥。
提示验签失败
可以依次检查:
- 是否误将应用公钥当成了支付宝公钥。
- 商户私钥与上传的应用公钥是否来自同一密钥对。
- 网站后台要求的是普通公钥还是证书文件。
- 是否混用了沙箱环境和正式环境的密钥。
sign_type是否统一设置为RSA2。- 复制密钥时是否遗漏字符,或者带入了多余空格和错误换行。
私钥应该保存在哪里
私钥应保存在服务端的安全配置、密钥管理系统或受访问控制的环境变量中。不要将其提交到 Git 仓库,也不要放入前端 JavaScript、公开配置文件、截图或日志。
如果怀疑私钥已经泄露,应立即重新生成密钥对,并在支付宝开放平台更新应用公钥。
备注:内容仅供参考。
