Druid数据库连接池改用公钥加密私钥解密

文章讨论了Druid配置文件中密码明文不安全的问题,提出了使用公钥加密,私钥解密的方式来增强安全性。通过自定义过滤器并利用Hutool的RSA工具类实现解密,将公钥配置在文件中,私钥保留在代码内,确保了密码的安全处理。此外,提到了在Spring配置中构造DataSource时解密密码的另一种方法,但认为编写过滤器的方式更为通用。
摘要由CSDN通过智能技术生成

druid在配置文件中需要配置用户名和密码,而密码是明文不安全,可以配置成密文。druid自带的加密机制,但是使用私钥加密,公钥解密。这个和非对称加密的使用是反着来得,一般私钥加密,公钥解密是用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不用来保证内容不被他人获得。所谓公钥,就是公开的钥匙,是大家都知道的,druid的自带的加密方式是用私钥加密,如果公钥直接配置在配置文件,那所有能看到配置文件内容的人都可以使用RAS算法用公钥来解密。那么这个公钥就必须保密放在一个相对于安全的地方,这个又违背了非对称加密,公钥是公开的这个设计。

所以,最好改为公钥加密,私钥解密,公钥直接配在配置文件,这样知道真实明文密码的人可以根据公钥随时加密新的密文,修改配置文件的密码,也比较方便。而私钥可以写到java代码里面,相对更加安全。下面介绍如何实现。

druid自带的解密逻辑放在了com.alibaba.druid.filter.config.ConfigFilte里面,所以可以模仿这个类来写,编写一个

 EncryptUtil.decrpt(encryptedPassword)代码逻辑就是用设定好的私钥进行解密配置文件那里配置公钥加密的密文,解密代码可以直接使用hutool的RSA工具类,几行代码就可以搞定。

最后在工程的resources目录加创建一个META-INF目录,里面放一个druid-filter.properties文件,里面配置一个自定义的filter(不会写就模仿durid的jar包里面的druid-filter.properties)。最后把filter配置到配置文件spring.datasource.druid.filters里面。配置文件的公钥其实随便找个地方配一下就行了,解密的时候可以不用从配置文件获取,直接从EncryptUtil写死的公钥和私钥获取就行了,配置在配置文件只是为了让使用的人可以知道公钥是什么。

当然,还有一种方式就是在spring的@Configuration中构造DataSource的时候,set password的时候去解密,但是这种方式不通用,有些工程没有写这个@Configuration,有些工程可能是多个数据源,有多个类配置了@Configuration,还有就是如果使用了mybatisplus 的动态数据源,还不能手动去配置@Configuration类,所以用上述编写filter的方式更加通用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值