druid数据库密码加密(安全加固)
上一篇文章介绍了springboot配置druid数据库密码加密。可是有没有想过,上面的做法很明显就是 “插着钥匙的锁”
将密文和公钥都写入配置文件,这就会造成当有人拿到密文和公钥之后,就可以使用 Druid 将加密的密码还原出来了,这就好比一把插着钥匙的锁是极不安全的。
因此正确的使用姿势:是将公钥找一个安全的地方保存起来,每次在项目启动时动态的将公钥设置到项目中,这样就可以有效的保证密码的安全了。可以使用springboot配置文件中的占位符 ${} 来实现。
因此我们可以修改为如下配置:
spring: application: name: export datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver druid: url: jdbc:mysql://localhost:3306/st?characterEncoding=utf8&useSSL=false&serverTimezone=UTC username: root password: cdDtOKLNCfbMPEjkzb1Ydd4RduwaRzKlz1MwiP4RZ/PcQ4yqrsyvH24RIQwkEjZo3boa+zoSlwuxyZkrn4G5tA== # 这里有个坑 connectionProperties: config.decrypt=true;config.decrypt.key=${spring.datasource.druid.publickey} initial-size: 5 max-active: 20 max-wait: 60000 min-idle: 5 filters: config filter: config: enabled: true server: port: 8081 mybatis-plus: mapper-locations: classpath:/mapper/*Mapper.xml global-config: db-config: table-prefix: yz_ configuration: # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl map-underscore-to-camel-case: false management: endpoints: web: exposure: include: "*"
可以看出公钥被修改成 “${spring.datasource.druid.publickey}” 了(并非是固定不可变的 key,用户可自行定义),这就相当于使用占位符先把坑给占上,等项目启动时再更换上具体的值。
第四步:启动参数添加公钥
开发环境只需要在 Idea 的启动参数中配置公钥的值即可,如下图所示:
生产环境在启动 jar 包时只需要动态设置公钥的值即可,参考以下命令:
java -jar xxx.jar --spring.datasource.druid.publickey=公钥MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIRaY6K+HbmcpZk5KWtCyOzn7ZBqNqFhpIVVAlOABMapUKR6biNvHBFIp8PcIPmEnN4aO/rcfKRGkpPD+9uh9EMCAwEAAQ==
如此大功告成!!