前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringBoot项目application配置文件数据库密码上传git暴露问题解决方案

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

作者头像
九转成圣
发布2024-04-10 18:20:13
1030
发布2024-04-10 18:20:13
举报
文章被收录于专栏:csdncsdn

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

问题

问题:

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

jasypt 加解密

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

Springboot引入jasypt

代码语言:javascript
复制
<!-- Java Simplified Encryption-->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>3.0.4</version>
</dependency>

加解密测试

代码语言:javascript
复制
@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);

}

输出

代码语言:javascript
复制
加密后: nOvch7+afYNA0xcbPQq1yzmK0yLj7GmCQR6YpVFH61IkMnTEULVgJz2b2yU3DKbs
解密后: hello ...

springboot使用jasypt

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

代码语言:javascript
复制
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-20240318133938290

原理简单解析

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

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SpringBoot项目application配置文件数据库密码上传git暴露问题解决方案
  • 问题
    • 问题:
    • jasypt 加解密
    • Springboot引入jasypt
    • 加解密测试
    • springboot使用jasypt
    • 原理简单解析
    相关产品与服务
    数据库
    云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com