druid实现数据库密码加密功能

发布时间 2023-12-31 21:32:47作者: 右手一个柚

数据库密码直接写在配置中,对运维安全来说,是一个很大的挑战。可以使用Druid为此提供一种数据库密码加密的手段ConfigFilter。
如果项目已经集成druid,只需按要求配置即可。

1、执行命令加密数据库密码

找到druid-1.2.20.jar所在的文件夹目录,执行cmd命令,然后执行下面的命令生成数据库密码的密文和秘钥对。

java -cp druid-1.2.20.jar com.alibaba.druid.filter.config.ConfigTools 数据库密码

命令最后的参数一定要输入你的数据库密码,版本号视情况而定,我们这边使用的是druid-1.2.20版本。
命令输出的是加密后的结果,主要关注publicKey和password。

2、配置数据源

2.1、password属性修改成加密结果里的password值,即数据库密码的密文。
password: KWddMcILCrnt6GXmhct33cgL+paOLt7TE0c2DIzEhQi3/MP+2ke2LfbHfgpvccP2AUX8GgzCl4iMNF4o/yypQg==
2.2、启用过滤器configFilter
filter:
    config:
      # 启用过滤器configFilter,config下面只有enabled一个属性
      enabled: true      
2.3、配置config下面相关属性

config.decrypt为加解密开关
config.decrypt.key为解密公钥

connection-properties: config.decrypt=true;config.decrypt.key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKOAuSzGYufWFSDIpd3A5Mmv1UxAhcNT5hUCl8RLxtSXR+3H5r4T26OD+99VqPyF+EqwDJptmJZz4sDcK7fvANsCAwEAAQ==
2.3、启动应用程序测试验证加密结果

如若忘记密码可以使用工具类解密(传入生成的公钥+密码)

    public static void main(String[] args) throws Exception {
        String password = ConfigTools.decrypt(
                "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKOAuSzGYufWFSDIpd3A5Mmv1UxAhcNT5hUCl8RLxtSXR+3H5r4T26OD+99VqPyF+EqwDJptmJZz4sDcK7fvANsCAwEAAQ==",
                "KWddMcILCrnt6GXmhct33cgL+paOLt7TE0c2DIzEhQi3/MP+2ke2LfbHfgpvccP2AUX8GgzCl4iMNF4o/yypQg==");
        System.out.println("解密密码:" + password);
    }