Java: 加密配置文件中的敏感信息

本文探讨了在Java项目中加密配置文件中的敏感信息,如数据库密码,以提高安全性。介绍了Druid和Jasypt两种加密方式。Druid的加密方式存在局限,而Jasypt提供了更灵活的加密选项。但无论哪种方式,加密密钥的暴露仍然是安全隐患,这些方法只能增加一定的防护,而非绝对安全。
摘要由CSDN通过智能技术生成
前言

在项目中,我们一般是将数据库的连接信息(账号密码等)明文写在配置文件中,这样会有一个问题,我们很容易就把数据库的账号密码暴露出去了,因为yml文件在打成jar包后不会进行编译,还是一个yml文件,只要这个yml文件不小心泄露,我们数据库的连接信息就暴露了,下面我们来针对问题研究一下,看有没有什么加密的方式

先来看不对密码进行加密的配置

datasource:
  name: druidDataSource
  type: com.alibaba.druid.pool.DruidDataSource
  druid:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip:port/db?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    # 明文密码
    password: yourpasswd
    # 其它配置略................

这样直接配置的明文,显得不太安全


然后得知 Druid 有自带的有加密方式,通过自带的jar包可以生成密钥,我们来试一下

Druid加密方式

先去自己的Maven仓库中找到Druid的jar包,我这里是1.2.5版本,其它版本应该也可以,然后打开命令行(cmd或者bash)定位到jar包所在的路径,执行如下命令(Aa123456 为原始数据库密码)

java -cp druid-1.2.5.jar com.alibaba.druid.filter.config.ConfigTools Aa123456

生成了privateKey、publicKey、加密后的password

privateKey:MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAtpgI1KFA4e/n/nLmUFgn70dEso/e3tq+wX49ek9pWFFGhogFmb7jDUyguSQ+Rvgt0txo7z2OdCRe9m4spzjGRwIDAQABAkBjfr65FlEjjDVvCi8DsrW4Ba6iWhEIgEuXZfGb9y+hBmTiEhWSW1UffdPD0ROTo9jg0suhNTxFcboPMF2GOdIBAiEA3gtH0jlMdi32fFCPkywh9oDzy6m5PAutrHpKEOBGm0cCIQDShFVt/eDraF2jiGzQooH+th8mdx/+OpHmDo7Q6Rv9AQIhANxlwA1n+IBZkQ7F/C0uIiwGxXcDaayzPtkzrS7hHtRjAiA+LaIB+9OcFFZb/+aL9QPKVMZ8mQDVGT2QosoiAEgpAQIhAIVq9yXbojHrW3G1cUsA1EkZ60pWjRgOrJrqbKXsULo4
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALaYCNShQOHv5/5y5lBYJ+9HRLKP3t7avsF+PXpPaVhRRoaIBZm+4w1MoLkkPkb4LdLcaO89jnQkXvZuLKc4xkcCAwEAAQ==
password:QQ446Ed787nuj8CClXEQ+zWqLQJF+d7cQsGmRQSTF+++fXR5flrzQXGHPjewAS1/OHUpKUb+82MYD0Mj6+K2yg==

更新yml中数据的密码为加密数据

其中password为上一步中生成的加密password,key为上一步生成的publicKey

datasource:
  name: druidDataSource
  type: com.alibaba.druid.pool.DruidDataSource
  druid:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://ip:port/db?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
    username: root
    # 这里填上面获取到的password
    password: QQ446Ed787nuj8CClXEQ+zWqLQJF+d7cQsGmRQSTF+++fXR5flrzQXGHPjewAS1/OHUpKUb+82MYD0Mj6+K2yg==
    # 这里填上上面获取到的publicKey
    key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALaYCNShQOHv5/5y5lBYJ+9HRLKP3t7avsF+PXpPaVhRRoaIBZm+4w1MoLkkPkb4LdLcaO89jnQkXvZuLKc4xkcCAwEAAQ==
    # config.decrypt=true 设定启动解密, config.decrypt.key=${spring.datasource.druid.key} 表示使用上一行配置的公钥来解密
    connection-properties: "druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${spring.datasource.druid.key}"
    initial-size: 1
    max-active: 20
    filters<
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值