接口安全分为:
完全开放的接口,
签名认证(基础安全),
签名认证+时效性(非常安全),
公钥+私钥(固若金汤),
公钥+私钥+https(金钟罩);
签名认证:无非就是双方定义一个秘钥,客户端获取参数然后按参数的顺序排序然后加上秘钥,再用MD5加密生成签名(参数+签名) 发到服务端后,客户端接受到参数按相同的规则进行(按参数的顺序排序然后加上秘钥,再用MD5加密),将客户端发送过来的签名和服务器端生成地 签名做比较,一致做其他相关操作返回信息,不一致直接返回
签名认证+时效性(非常安全):这个无非就是在客户端发送过来的参数上加了一个时间戳一同发送过来,服务器收到请求时,获取时间戳的信息转成date格式和当前时间做比较,上下留个30秒左右的时间间隔可以访问,在这个时间段内可以访问然后做其他相关操作,不在直接返回访问超时
// 将时间戳转化成date然后进行下面判断timeStemp时间戳
Date date = new Date(Long.parseLong(timeStemp));
// 时间时效性的验证
Calendar startCalendar = Calendar.getInstance();
startCalendar.add(Calendar.SECOND, -15);
Date startDate = startCalendar.getTime();
Calendar endCalendar = Calendar.getInstance();
endCalendar.add(Calendar.SECOND, +15);
Date endDate = endCalendar.getTime();
if (date.after(startDate) && date.before(endDate)) {
// 符合要求可以处理
}
公钥+私钥(固若金汤):这个就是通过openssl 来生成客户端的公钥和私钥两把钥匙
1、输入命令 openssl 进入Openssl命令行;
2、使用openssl生成私钥,执行如下命令:genrsa -out rsa_private_key.pem 2048
3、注意:在java中Java开发者需要将私钥转换成PKCS8格式,执行如下命令:
pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem
4、使用openssl生成公钥,执行如下命令:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
这个就是在客户端获取参数后再加上一个客户端生成的私钥然后通过写的signUtils工具类来生成一个签名 发送给服务器端 (参数+签名) 然后将客户端的公钥私下交给服务器端,当服务器端拿到参数后signUtils来验证签名是否一致,一致的话进行后面操作,服务器要返回的参数+服务器的私钥生成一个签名,返回给客户端 同时将服务器端的公钥给客户端,客户端通过返回的签名和私下给的公钥进行signUtils来验证签名是否一致,一致则做自己的逻辑操作否则反之。
公钥+私钥+https(金钟罩);这个是需要申请一个认证书,一般都是公司的运维去操作,这个认证书是需要买的。就是在url后面的请求地址变成了https://的请求 ,这种是安全级别最高的。安全是相对的,只有相对的安全,没有绝对的安全!