4.1 原则#
2.
无论是请求端还是响应端接收到报文后,都需要进行签名验证,即按照约定算法重新生成签名,然后和收到的签名进 行对比,对比通过后才能进行报文内容的解析,否则报文或文件内容可能出现篡改、部分丢失、伪造的问题。
3.
报文加密算法:DES/CBC/PKCS5Padding
5.
会话密钥加密算法:RSA/ECB/PKCS1Padding
4.2 RSA密钥对获得#
对于商户来说,需要生成商户自己的RSA密钥对(包含公钥和私钥),其中,私钥合作方自己保留,同时公钥提供给Easyloon。对于Easyloon来说,需要为每个商户生成对应的公私钥对。其中,私钥Easyloon自己保留,公钥需要提供给商户。openssl genrsa –out rsa_private_key_2048.pem2048
#生成rsa私钥,以X509编码,指定生成的密钥的位数:2048openssl pkcs8 –topk8 –in rsa_private_key_2048.pem –out pkcs8_rsa_private_key_2048.pem –nocrypt
#将上一步生成的rsa私钥转换成PKCS#8编码openssl rsa –in rsa_private_key_2048.pem –out rsa_public_key_2048.pem –pubout
#导出rsa公钥,以X509编码商户需要按上面步骤生成商 户的公钥pem发给Easyloon,
#或商户直接可以向Easyloon索要密钥对的生成脚本,生成商户所需的公私钥。
#Easyloon也需要把Easyloon生成的对应的公钥pem发给商户。
4.3 报文加密及签名#
1.
对请求或响应Json报文明文(UTF-8编码. 使用发送方的私钥进行签名(SHA1withRSA. ,并将签名结果转换为HEX字符串,得到sign域。
2.
使用KeyGenerator生成器,生成DES加密会话密钥SK;
3.
使用SK对Json明文进行加密(DES/CBC/PKCS5Padding. ,并将加密结果转换为HEX字符串,得到jsonEnc 域。
4.
使用接收方公钥对会话密钥SK加密(RSA/ECB/PKCS1Padding. ,并将结果转换为HEX字符串,得到keyEnc 域。
4.4 报文解密及验签#
1.
将keyEnc域转换为二进制byte数组,使用接收方放的私钥对会话密钥,得到明文SK;
2.
将jsonEnc与转换为二进制byte数组,使用上一步得到的会话密钥SK解密,得到明文json;
3.
使用上一步解密得到的明文、发送方公钥和sign域数据验证签名的有效性。
4.5 accessToken 使用说明#
1.
以 FX 询价接口为例,在 head 内增加参数 accessToken,即代表当前用户主体发起操作。 Sample:
{
"head": {
"accessToken": "7c4a8d09ca3762af61e59520943dc26494",
"version": "1.0.0",
"tradeType": "00",
"tradeTime": "1551341750",
"tradeCode": "TP1002",
"language": "cn"
},
"body": {
"sellCurrency": "USD",
"buyCurrency": "CNY",
"rate": "7.0102",
"sellAmount": "1000.00",
"buyAmount": "7010.20",
"quoteId": "7843892398239",
"expireTime": "1576560599598",
"merOrderNo": "32894398349"
}
}