主要分为三个方面:
1. 数据传输加密
目前普遍采用SSL协议中相关算法进行传输层的加密,通常是对称的摘要算法(配合证书通过https进行数据对接),或者使用VPN(IPSEC VPN、SSL VPN、MPLS VPN)进行传输甚至专用电路MSTP。
2. 身份认证
目前普遍采用数字证书技术进行身份认证,数字证书具体又可以分为第三方证书和自签名的证书。认证方法又可以分为单向认证和双向认证。
单向认证比较好理解,数据的请求方根据服务方发过来的证书信息验证其是否为合法身份,通过公钥拆解证书来验证,通常服务方的证书为购买的第三方证书。
如果是严格意义上的双向认证,此时服务方需要验证请求方的身份,使用服务方的私钥即跟证来验证,此时通常是由服务方发给请求方的自签名的客户端证书。
国内通常使用的是伪双向认证,即使用异步调用的方式,由服务方将结果再次调用请求方的接口传递过去,同时根据请求方回调接口提供的第三方证书验证请求方的身份合法性。
3. 数据的完整性
主要是指数据的真实性和防篡改。目前通常采用签名算法来保证,如MD5,RSA等。
签名时将字符转化成字节流时指定的字符集保持一致, 根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URLEncoding,这样请求接收方才能接收到正确的参数值。这种情况下,待签名数据应该是原生值而不是encoding之后的值。例如:调用某接口需要对请求参数email进行数字签名,那么待签名数据应该是:email=test@test.com,而不是email=test%40test.com。
RSA签名方法需要公钥和私钥,数据提供方使用私钥对数据进行加密,并由数据提供方向数据接收方提供公钥进行解密。当数据提供方将数据发送到数据接收方,该数据将被数据提供方私钥进行加签,同时数字签名也将被包括在发送到数据接收方的数据中。
当接收到来自数据提供方数据,数据接收方首先构造待签名字符串,然后把待签名字符串、数据提供方提供的公钥、数据提供方提供的参数sign的值三者一同放入RSA的签名函数中进行非对称的签名运算,来判断签名是否验证通过。