本文结合了登录RSA验证,token验证,报文的加密传输(AES保证速度、RSA保证安全),防篡改以及其他的相关验证/束缚(防重复提交、ip/token频次束缚后期都可以融合进来)等一些列的技术点,可供参考;
tips: 报文RSA私钥与AES密钥明文 都有2种作用:RSA私钥,仍是TOKEN算法密钥;AES密钥明文 仍是防篡改的KEY;这样充分运用了其安全的性质进行重复运用,可以节省部分开支,否则还需要额外进行维护
一、登录
客户端填写账密信息主张央求,后台生成RSA密钥,保存私钥,回来公钥 (此公钥不安全,没有验证就可以获取,报文不能用其加密)(第一次RSA只为了加密帐号暗码,防止被盗取)
客户端对账密运用RSA公钥进行加密,再传输到后台(防止账密被解密获取)
后台解密后验证账密,成功后生成新的RSA密钥(第2次RSA为了报文加密)
然后运用JWT技术生成token(真token),token的算法运用RSA私钥作为token算法的暗码,毕竟生成token(真token),然后拼接RSA公钥生成毕竟的伪token(真token###RSA公钥)
后台redis存储伪token作为key,rsa私钥作为value进行缓存redis<"伪token","rsa私钥">(设置过期时间)
然后将生成的伪token(token+RSA公钥),传给客户端用于令牌验证以及报文的加密,json格式({"token":"实在token###rsa公钥"})
二、 前端发送央求
客户端填写央求参数,然后运用AES以及随机生成的AES密钥明文对称加密将报文进行加密,生成AES加密的报文(对称加密效率高)
然后解析token,获取rsa公钥,运用RSA公钥对AES密钥明文进行加密,生成RSA加密的AES密钥(非对称加密更安全)
再运用AES密钥明文作为防篡改key对上述AES加密的报文运用(256+MD5)进行核算,生成字符串作为签名256MD5签名,进行防篡改操作
终究发送带后台:报文json格式({"secretInfo":"AES加密的报文","aesKey":"RSA加密的AES密钥","checkStr":"256MD5签名","token":"真token###报文公钥"})。
三、 下面后台处理(验证部分运用aop切面编程+注解)
后台收到上述报文后,先解析伪token(真token###报文公钥),从redis获取对应的rsa私钥/token算法的key,运用rsa私钥/token算法的key核算验证token是否通过;
然后运用rsa私钥对RSA加密的AES密钥进行解密,获取AES密钥明文/防篡改key;
然后进行防篡改验证:运用256MD5和防篡改key生成签名与传进来的checkStr进行对比,假设一起则未被篡改
进行重复提交检测(以内容重复提交为例–即内容不得相同,修正正可再次提交),运用加密的报文内容作为key存储到redis并设置完结;ip/token访问频次束缚等;
然后解密报文,并进行参数检测,json可以定义反射方法对参数进行验证;
终究进行事务处理,并回来处理结果。