一、过程
1.调用第三方接口前,一般需要按规则将参数按key1=value1&key2=value2 阿斯克码排序,sign参数不参与加密
2.将排序并连接好的参数字符串通过我方的私钥证书(.pem)进行加密得到加密串,当然加密得到的是 []byte 字节流,需要将字节流转换成base64字符串
3.将加密字符串赋值给sign参数,并与其他加密参数一起通过post (application/x-www-form-urlencoded )请求第三方接口。 当然,第三方与我方对接的时,会要求我方提供公约证书给到他们,用以拿到我方请求后,对我方请求参数进行延签。
4.同理,我方请求第三方后,会返回数据给到我方以及第三方会请求我们的回调接口,那么就需要对第三方返回的参数进行验签,而验签同理需要将加密参数提取出来,并进行排序,需要明白的是,此时解签我们需要用到 第三方的公钥 进行验签,
5.其中需要注意的是:我所了解的目前golang 加密和解密一般都是用的pem证书,而大部分第三方提供的证书是 .pfx .cer ,所以我需要在win上安装openssl工具,然后将 .pfx .cer转成 .pem证书
证书转换方式如下:
1. 下载Win64OpenSSL-3_1_2.exe 并安装(下载:https://slproweb.com/products/Win32OpenSSL.html)
2. 环境变量 Path 加入 D:\OpenSSL-Win64\bin
3. amd 下命令: openssl version 验证是否安装成功
4. 通过命令解析生成 公私钥 uat.pfx
openssl pkcs12 -in xxxx.pfx -nodes -out server.pem #生成为原生格式pem 私钥 ******
openssl rsa -in server.pem -out server.key #生成为rsa格式私钥文件
openssl x509 -in server.pem -out server.crt
openssl pkcs12 -in xxxx.pfx -clcerts -nokeys -out key.cert
openssl x509 -inform der -in xxx.cer -out xxx.pem #公钥pem *******
<