一. 简介
HTTP接口是互联网各系统之间对接的重要方式之一,使用HTTP接口开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享。
由于HTTP接口开放在互联网上,所以我们就需要有一定的安全措施来保证接口安全。
HTTP API接口安全性演进如下
- HTTP + 完全开放 (毫无安全可言)
- HTTP + 参数签名 (基本安全)
- HTTP + 私钥签名公钥验签 (安全性高)
- HTTPS + 参数签名 (安全性更高)
- HTTPS + 私钥签名公钥验签 (最安全)
总的来说HTTP接口安全主要靠以下3点
- 使用HTTPS代替HTTP,因为HTTP是明文传输,HTTPS使用加密传输,HTTPS代替HTTP一般是通过运维手段来实现
- 参数签名,客户端和服务端事先约定好秘钥,客户端使用秘钥签名,服务端使用相同算法计算签名进行校验
- 客户端使用私钥签名,服务端使用公钥验证签名
无论是使用参数签名法还是使用私钥签名公钥验签法,都是为了确认请求参数没有被篡改,保证请求是安全的。
这篇文章主要介绍一下这2种方法的简单实现。
二. 参数签名
参数签名一般指的是使用hash算法对请求参数计算得到签名。
客户端计算签名步骤如下
- 客户端和服务端事先约定 秘钥secret和盐salt,秘钥和盐一般是16或32位字符串
- 客户端计算一个sigTime
- 请求所有参数和sigTime,拼接成一个字符串并按字典序排序,记为data