使用Druid数据源,在Spring Boot中配置数据库密码加密

使用Druid数据源,在Spring Boot中配置数据库密码加密

密码以明文的形式配置在配置文件,这确实是一件比较不安全的操作。Druid提供了一种加密的机制。可以一定程度上解决这种问题,起码不能让人直接肉眼识别出链接密码。

Druid

先对密码进行加密

Druid包中提供了一个带Main函数的工具类:ConfigTools

java -cp druid-1.1.21.jar com.alibaba.druid.filter.config.ConfigTools [db password]

执行加密,得到私钥,公钥,加密后的密文

C:\Users\Administrator\Downloads
λ java -cp druid-1.1.21.jar com.alibaba.druid.filter.config.ConfigTools 123456
privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAmKG07t5LjmnvZeJVaSJSsLDqg0KJJwyb2JDQrcvABcaZH7o3StdmcVb/pltnoooOYsaNwxDk6W/oz04yVUzbjQIDAQABAkB0YblI+o+6Q+SbV32w8M8Ek6H9/FoAQIkFFUdJfjcpLxc9gFaYz6k6LxjmX8d4k/saZUXYbh0Pu2lQzlIYQTgxAiEA7YhQCgG2MQCYcXdsDTIRX6jWAFIQ7dGf0kLZlH+NxKcCIQCkf5XX/od4pJtLVSXpocbWsWnMoN4/xE7C0cJy5GGAqwIhAI4jYMnsJksCcTaM4OKwkEbu8Eg205yMMRgQGsVK4tnHAiB0R1OuiNdOKl0z1Q6lpZuea250HUq9HJDoGcov2MwrXQIgZ4AL7b6udTEfNgj1oJia9ZFUnMJpx/CcmM5QVbIoDDQ=
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJihtO7eS45p72XiVWkiUrCw6oNCiScMm9iQ0K3LwAXGmR+6N0rXZnFW/6ZbZ6KKDmLGjcMQ5Olv6M9OMlVM240CAwEAAQ==
password:XGBYQ5AXkV2nKI+XdZicBESPBIzQJK4eEzTtcIwLsvJmoUgHk0inTcxFuGGCU5ywCfeIZrofBi0F2rZyu8tohw==

对数据源进行加密密文的配置

核心的配置

  • config.decrypt=true 开启解密
  • config.decrypt.key=${publickey} 指定解密的公钥
# 加密后的密码(原密码 123456)
spring.datasource.password=XGBYQ5AXkV2nKI+XdZicBESPBIzQJK4eEzTtcIwLsvJmoUgHk0inTcxFuGGCU5ywCfeIZrofBi0F2rZyu8tohw==
# 公钥
publickey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJihtO7eS45p72XiVWkiUrCw6oNCiScMm9iQ0K3LwAXGmR+6N0rXZnFW/6ZbZ6KKDmLGjcMQ5Olv6M9OMlVM240CAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${publickey}
# 启动ConfigFilter
spring.datasource.druid.filter.config.enabled=true

原理

就是使用512位的RSA私钥,对密码进行加密。然后通过配置中的公钥来进行解密。

ConfigTools 的源码

https://github.com/alibaba/druid/blob/master/src/main/java/com/alibaba/druid/filter/config/ConfigTools.java