RSA Secure Data Connections for API Design based on HTTPs

本篇讲解一下,如何设计安全的 API 接口通信策略。主要包含以下三个方面:
1. 启用 HTTPs
2. 数据加密(RSA)
3. 参数签名(MD5)

本篇之后,将继续撰写两篇文章,使用代码实例,讲解 Server 与 Client 的通信处理过程。

1. 启用 HTTPs

HTTPs 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 HTTP 协议安全。 使用 HTTPs 对网络传输的内容进行加密,可防止内容监听和内容篡改。
启用 HTTPs 服务,需要申请 SSL 证书 StartSSL

2. 数据加密(RSA)

网络安全是一个整体的事件,涉及到个人计算机的安全,协议的安全,传输数据的安全,以及软件开发公司和网站的安全。 单纯的依靠一个 HTTPs 协议并不能解决所有的问题。
因此,为了保证网络传输中数据的安全,不可读性。我们引入 RSA 非对称加密算法。 平台端与客户端,共享各自的公钥,双方加密的信息只有各自的私钥才能解密,只要私钥不泄漏,通信就是安全的。
对于较大的数据,需要进行分段加密。

RSA 算法历史背景
1977 年,三位数学家 Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做 RSA 算法。从那时直到现在,RSA 算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有 RSA 算法。 这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长 RSA 密钥是 768 个二进制位。也就是说,长度超过 768 位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024 位的 RSA 密钥基本安全,2048 位的密钥极其安全。

3. 参数签名(MD5)

当接口服务启用了 HTTPs,并使用 RSA 算法对数据进行加密之后,理论上数据的安全性已经很高了。 为了进一步防止传输中的数据被篡改,再增加一道防线:参数签名。
将接口中所有参数名按照字典顺序排序。再把所有参数“参数名1参数1的值a参数名2参数2的值b...”连接起来,使用 MD5 算法,计算出一个签名字符串,与加密的数据一起传输。可防止数据在传输的过程中被篡改。

4. 安全的 API 接口架构图解

基于 HTTPs,使用 RSA 加解密算法,并结合 MD5 进行参数签名的通信流程图解。

参考链接
HTTPs 那些事(一)HTTPs 原理
RSA 算法原理(一)

2017-10-20

rocket-wing