druid数据库密码加密(安全加固)

作者: adm 分类: java 发布时间: 2021-08-01

上一篇文章介绍了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==

如此大功告成!!

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!