除了使用支付宝提供的一键生成工具外,也可以使用OpenSSL工具命令生成密钥。

支付宝的验签流程


①:商户上传自己的商户公钥到支付宝服务器 ②:使用商户私钥请求签名参数 ③:签名以后的参数请求到支付宝 ④:支付宝服务器使用商户上传的商户公钥,验签商户请求参数,并处理支付结果 ⑤:对商户支付结果使用支付宝私钥签名 ⑥:商户使用支付宝公钥验签支付返回的支付结果

1. 生成密钥

首先进入OpenSSL工具,输入以下命令。

$ openssl
# 生成私钥, 新建应用请务必使用2048位
OpenSSL> genrsa -out app_private_key.pem  2048
#Java开发者需要将私钥转换成PKCS8格式
OpenSSL> pkcs8 -topk8 -inform PEM -in app_private_key.pem -outform PEM -nocrypt -out app_private_key_pkcs8.pem 
#生成公钥
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem
OpenSSL> exit #退出OpenSSL程序
复制代码

经过以上步骤,开发者可以在当前文件夹中(OpenSSL运行文件夹),看到app_private_key.pem(开发者RSA私钥,非Java语言适用)、app_private_key_pkcs8.pem(pkcs8格式开发者RSA私钥,Java语言适用)和 app_public_key.pem(开发者RSA公钥)3个文件。开发者将私钥保留,将公钥提交给支付宝配置到开发平台,用于验证签名。以下为私钥文件和公钥文件示例。

**TIPS:**对于使用Java的开发者,需将生成的pkcs8格式的私钥去除头尾、换行和空格,作为私钥填入代码中,对于.NET和PHP的开发者来说,无需进行pkcs8命令行操作。

标准的私钥文件示例(PHP、.NET使用)

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQ......k592
-----END RSA PRIVATE KEY-----
复制代码

PKCS8处理后的私钥文件示例(Java使用)

MIICeAIBADANBgk......PcUDUh2/
复制代码

公钥文件示例

-----BEGIN PUBLIC KEY-----
MIGfMA0GCSq......IDAQAB
-----END PUBLIC KEY-----
复制代码

将公钥文件去除头尾、换行和空格,转成一行字符串。把该字符串提供给支付宝账号管理者,登录开放平台上传应用公钥并获取支付宝公钥。教程

如果需要使用文件方式(如PHP/.NET版本)读取支付宝公钥,需要在头尾加入标示后保存至文件```

2. 上传支付宝

点击签名验签工具右下角的“上传公钥”会打开支付宝开放平台网页,输入账号登录。

在“我的应用”中,选择要配置密钥的应用,点击“查看”。记录对应的APPID(下图红框处),在代码中使用。


在“应用信息”-“接口加签方式”下方点击“设置应用公钥”。

!!!!!!注意!!!!!! 1)接口中的sign_type参数应与上传密钥的加签方式一致。例如接口参数中sign_type=RSA2,请求时就会使用此处设置的RSA2(SHA256)公钥验签。 2)新建应用仅支持RSA2加签方式,详情请见开放平台接口签名方式升级公告。



根据开发者的条件设置应用公钥或上传公钥证书,常规请点击设置应用公钥。



3. App 对接支付宝流程



参考文章

  • 使用OpenSSL工具生成密钥
  • RSA和RSA2签名算法区别