SpringBoot项目application配置文件数据库密码上传git暴露问题解决方案

SpringBoot项目application配置文件数据库密码上传git暴露问题解决方案

问题

问题:

项目中含有配置文件,配置文件中含有数据库的用户名和密码,上传git直接对外网开放。那后果会怎样可想而知。

jasypt 加解密

jasypt(Java Simplified Encryption)是一个简化的开源 Java 加密工具库

Springboot引入jasypt

<!-- Java Simplified Encryption-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

加解密测试

@Test
public void test1(){
    // 参考 https://github.com/ulisesbocchio/jasypt-spring-boot
    PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
    SimpleStringPBEConfig config = new SimpleStringPBEConfig();
    // 加密密码
    config.setPassword("123456");
    // 默认值
    // 加密算法
    config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");
    // 设置密钥获取迭代次数。在生成加密密钥时,会对密码进行多次迭代操作,以增加密钥的复杂度。
    config.setKeyObtentionIterations("1000");
    config.setPoolSize("1");
    config.setProviderName("SunJCE");
    config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
    config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
    config.setStringOutputType("base64");
    encryptor.setConfig(config);
    String encrypt = encryptor.encrypt("hello ...");
    System.out.println("加密后: " + encrypt);
    String decrypt = encryptor.decrypt(encrypt);
    System.out.println("解密后: " + decrypt);

}

输出

加密后: nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs
解密后: hello ...

springboot使用jasypt

使用很简单,只需要引入jasypt-spring-boot-starter依赖,然后将配置文件中的明文换成"ENC(密文即可)“,例如密码为"hello …”,加密密码为"123456",加密之后的密码为"nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs"

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/scott?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
    username: root
    password: ENC(nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs)

项目启动时添加启动参数"-Djasypt.encryptor.password=123456"

image-20240318133938290

image-20240318134005201

原理简单解析

拿到配置信息>判断配置信息是否以"ENC(“开头并且以”)"结尾,如果是就拿到提取出密文>获取到加解密key>使用jasypt解密密文>将密文替换为明文

注意:在运行环境是可以拿到明文的,例如通过@Value(“${spring.datasource.password}”)拿到的依然是明文,但在源码级别是看不到明文的,而且加解密密码是通过环境变量提供的,所以即便别人看到密文也解不开,也访问不了我们的数据库.

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baidu_16992441

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值