安全规范

1、

数字签名

为了保证数据传输过程中的数据真实性和完整性,我们需要对数据进行数字签名,在接收签名数据之后进行签名校验。

数字签名有两个步骤,先按一定规则拼接要签名的原始串,再选择具体的算法和密钥计算出签名结果。一般失败的结果不签名。

(1)签名原始串

无论是用get、post还是xml,签名原始串组串方式都一致,除sign字段外,待签名参数按照字段名的ascii码从小到大排序后使用QueryString的格式(即key1=value1&key2=value2?)拼接而成,空值不传递,不参与签名。

签名时字段名和字段值都采用原始值,不进行URL Encode。

签名的字段包括请求中有所的get或post字段,除了接口中描述的字段外,还应包括请求中出现的其它字段。

目前仅支持SHA256withRSA签名算法

(2)签名算法

(3)签名(伪代码)

数字签名= Base64_encode ( SHA256withRSA_sign ( 签名原始串 ,商户私钥.pfx) )

(4)验签(伪代码)

验签 = SHA256withRSA_verify ( 签名原始串 , Base64_decode(数字签名 ) ,易票联公钥.cer )

(5)商户证书安全

证书文件不能放在web服务器虚拟目录,应放在有访问权限控制的目录中,防止被他人下载。商户服务器要做好病毒和木马防护工作,不被非法侵入者窃取证书文件。

2、

商户回调API安全

在普通的网络环境下,HTTP请求存在DNS劫持、运营商插入广告、数据被窃取,正常数据被修改等安全风险。商户回调接口使用HTTPS协议可以保证数据传输的安全性。所以微信支付建议商户提供给微信支付的各种回调采用HTTPS协议。