weixin-java-tools/weixin-java-miniapp/api-signature-readme.md

47 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 使用API签名
如果对API签名不了解可先阅读微信文档 [服务端API签名指南](https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/getting_started/api_signature.html)
有API数据加密与签名两种功能此处按照微信文档简称为签名。
## 程序内设置
[WxMaConfig](src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java)类增加了几个属性,分别对应小程序内设置的签名密钥等。
* apiSignatureAesKey
* apiSignatureAesKeySn
* apiSignatureRsaPrivateKey
* apiSignatureRsaPrivateKeySn
这4个属性需要按照小程序后台设置。
## 小程序后台设置/查看签名用密钥
在小程序后台,开发管理 -> 开发设置 -> API安全处可以看到如下图界面。
![图一](../images/api-signature/api-signature-1.png)
上图中A处对应 apiSignatureAesKeySn B处对应apiSignatureAesKey; C处对应apiSignatureRsaPrivateKeySn
apiSignatureRsaPrivateKey 在上图中**无**对应C处右侧是公钥apiSignatureRsaPrivateKey 需要的是私钥。
可点击图上右上角的修改,打开如下图的设置页面
![图二](../images/api-signature/api-signature-2.png)
首先确保对称密钥选中 AES256非对称密钥选中RSA。不要选SM4和SM2。
如果需要支持SM4/SM2可修改BaseWxMaServiceImpl.java中postWithSignature方法中相应部分实现
在API非对称密钥中下方左侧有个「随机生成密钥对」点击它然后点它右侧的「下载私钥」之后点击「确认」保存。
下载得到的文件是PKCS1格式的私钥用openssl可转成PKCS8格式。apiSignatureRsaPrivateKey 需要设置的是PKCS8格式的私钥。
注意:
1. 如果不先点击「随机生成密钥对」,直接点击「下载私钥」得到的是公钥,公钥在这里没有用途。
2. 打开下载的文件,第一行是「-----BEGIN RSA PRIVATE KEY-----」说明是PKCS1格式私钥。
3. PKCS8格式第一行是「-----BEGIN PRIVATE KEY-----」
4. 转换命令 `openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in PKCS1格式密钥文件名 -out 新的PKCS8格式密钥文件名`
5. 如果密钥文件有 PUBLIC KEY 字样,说明下载了公钥,重新生成密钥对,下载私钥