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==
如此大功告成!!

