1 涉及加密算法
- AES
- RSA
- MD5
2 安全中心設(shè)計(jì)
工作中發(fā)現(xiàn)的問(wèn)題:
工作中使用springcloud,發(fā)現(xiàn)很多模塊大家把對(duì)稱加密的Key硬編碼工程中,如果想更換key
那么要把所有的項(xiàng)目都更換一次,當(dāng)然也許有人說(shuō)使用jar依賴搞定,其實(shí)問(wèn)題依舊,我們現(xiàn)在
公司大概有十幾個(gè)服務(wù),總不能更換一次Key讓所有的項(xiàng)目重新打包部署吧?
2.1 首先個(gè)人覺(jué)得對(duì)稱加密的Key應(yīng)該保持一定的時(shí)間進(jìn)行更換,防止對(duì)稱加密Key外泄的可能性,其次這個(gè)
過(guò)程應(yīng)該是動(dòng)態(tài)完成的,在這里主要指的是我工作常用的AES加密和RSA加密
2.2 當(dāng)然如果按照2.1所說(shuō),那么就有一個(gè)問(wèn)題,怎么來(lái)保證每次更換Key能及時(shí)通知到其他客戶端以及后臺(tái)各個(gè)模塊?
首先把這個(gè)問(wèn)題分為兩塊:
1. 后端: 由于現(xiàn)在微服務(wù)的火熱,后端存在多個(gè)模塊,可以直接把Key放入彼此信賴的中
間件中,比如redis、Mysql等, 可以做到動(dòng)態(tài)實(shí)時(shí)獲取最新的key,因?yàn)檫@些對(duì)稱加密底層代
算法以及代碼實(shí)現(xiàn)都是一樣的,當(dāng)然也可以做成一個(gè)starter,直接導(dǎo)入依賴即可簡(jiǎn)單配置即
可,這里可以包含工作中常用的工具類或需要注入IOC容器的bean
2. 客戶端:
這里主要指的是安卓IOS和PHP, 因?yàn)槲覀児局饕莏ava提供接口,其他客戶端調(diào)用,
對(duì)于這樣的客戶端直連redis和mysql等中間件會(huì)存在一定安全的問(wèn)題,所以后端的方案不
太適合客戶端,硬編碼也會(huì)存在問(wèn)題。
這里可以使用RAR和AES配合搞定,客戶端啟動(dòng)后發(fā)送請(qǐng)求到后端,后端用RSA算法
生成一個(gè)公pubKey1一個(gè)私鑰priKey1,將公鑰返回客戶端??蛻舳死肦AR算法也生成一
個(gè)公鑰pubKey2和一個(gè)私鑰priKey2,將pubKey2通過(guò)后端公鑰pubKey1進(jìn)行加密發(fā)送到服
務(wù)端。此時(shí)服務(wù)端接收到客戶端進(jìn)行公鑰pubKey1加密后的數(shù)據(jù),利用priKey1解密,即可
得到客戶端的公鑰pubKey2。然后服務(wù)端獲取對(duì)稱加密的Key用公鑰pubKey2加密返回給客
戶端,客戶端解密其返回AES加密后的數(shù)據(jù),即達(dá)到了動(dòng)態(tài)獲取key的效果