SpringBoot项目配置明文密码泄露问题的处理方式

目录
  • 项目配置明文密码泄露问题的处理
    • 1、使用系统环境变量储存密码
    • 2、密码还是写在程序的配置文件里
  • 给配置文件中用户名密码加密
    • 原配置文件内容
    • 详细操作步骤
    • 新配置文件内容

项目配置明文密码泄露问题的处理

在项目开发过程中,需要配置数据库连接密码、Redis密码、网盘上传的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心。

这些信息如果泄露,还是会造成一定的困扰,这里介绍2种处理方案:

1、使用系统环境变量储存密码

比如K8S的环境变量、Windows的环境变量、Centos的环境变量等等,

然后在程序里使用 System.getenv()方法读取。

这种方式的好处:只有运维人员知道,连开发都不知道生产的密码。

密码变更也简单,运维直接操作就好了。

缺点就是部署时,容易遗漏,不过可以通过统一的环境镜像来处理。

一般推荐这种方式

注:如果变更密码,还是要考虑重启一下服务器上的所有服务,避免缓存了旧密码,导致服务故障。

2、密码还是写在程序的配置文件里

或者nacos之类的配置中心, 但是不使用明文,而是使用加密后的串。 同时在启动命令行里,指定密码参数。 下面介绍一下这种加密方式:

2.1、添加依赖,参考:https://github.com/ulisesbocchio/jasypt-spring-boot

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

2.2、对文本进行加密,假设密码为123456,加密代码如下(建议部署一个加密后台,给开发用):

// 参考 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);
System.out.println("beinet 加密后: " + encryptor.encrypt(username));

上面的代码输出:beinet 加密后: 8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv

2.3、把加密后的文本,套上 ENC()函数,写入yml配置里:

pwdTest:
  ak: ENC(8LJb3ICopErpPuEw1S/3rHc2fkk1qPScP0ODDbnmuSBjY6NJqN1oZcAxNDVl06qv)

2.4、配置一下IDEA的Java启动命令行参数:

点击右上角 Edit Configurations… 在右侧Configuration=>Environment=>VM options的右边添加:

-Djasypt.encryptor.password=123456

2.5、运行代码验证一下:

@Value("${pwdTest.ak}")
private String ak;
@Override
public void run(String... args) throws Exception {
    System.out.println(ak);
}

可以看到,能成功打印出解密后的 beinet

给配置文件中用户名密码加密

原配置文件内容

详细操作步骤

1、在pom.xml文件中加依赖

<!--明文加密-->
	<dependency>
		<groupId>com.github.ulisesbocchio</groupId>
		<artifactId>jasypt-spring-boot</artifactId>
		<version>2.0.0</version>
	</dependency>

2、重新加载pom文件(因为可能会出现新加的依赖maven不生效) 3、找到maven仓库中的上面的依赖的位置

eg:我的位置是这里,请注意自己的位置(肯定是在org路径下)

4、打开PowerShell窗口(在jar包目录中按住shift+鼠标右键)

5、输入命令,执行jar包加密

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“Zhiradar@135” password=Zhiradar@135 algorithm=PBEWithMD5AndDES

注:input=" ",分号中的内容为原配置文件中的需要加密的数据,该数据必须在双引号内

eg: input=“Zhiradar@135”

password= ,没有引号,并且=号后面的值是你自己起的,叫啥都行(尽量复杂一点,都是为了安全性)

eg1: password=sdkjfhkhs

eg2: password=woshinibaba@163

图示:

  • 绿色框里的为原配置文件用户名和密码
  • 蓝色框里的为盐值(盐值就是你自己起的那个加密数据)
  • 黄色框里的是执行上述命令后生成的新配置文件中的用户名和密码

新配置文件内容

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}

这个是服务启动时候需要给配置文件增加的环境变量参数(就是上面自己起的)

JASYPT_ENCRYPTOR_PASSWORD也是自己起的名字

要对应启动jar包或者启动项目是配置的环境变量用的

jasypt.encryptor.algorithm=PBEWithMD5AndDES

这个是加密方式,其实默认的就是这种

6、在启动类上面加上注解

@EnableEncryptableProperties

表示启动项目就开启加密配置

7、启动项目验证配置正确不正确 1)打成jar包

执行jar包形式

java -DJASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135 -jar .\xxl-job-admin-2.0.2-SNAPSHOT.jar

JASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135

JASYPT_ENCRYPTOR_PASSWORD自己在配置文件中配置的

Zhiradar@135 盐值也是自己起的

2) 在IDEA中启动

run–>Edit Configuarations

以上为xxl-job框架中的admin模块用户名和密码加密(涉及到启动项目后会在可视化平台输入用户名和密码)

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • jasypt 集成SpringBoot 数据库密码加密操作

    昨天看到一片文章,说是某某旗下酒店数据库因为程序员不小心,把数据库明文密码上传到了GitHub上,导致酒店数据注册资料.入住信息,开房记录被下载倒卖的消息. 作为程序员,开发的时候为了简单,账户明明都设置很简单,基本上数据库密码都是明文的,没做什么操作,至少我待过的公司都是这样,无论是测试环境还是线上环境,想想,这个也是一大安全隐患,在此,趁现在不忙,做些基于springboot的数据库密码加密. 1.pom.xml添加jar包(不同jdk选择不同的版本): <!-- jdk8 版本 整合jas

  • 关于Springboot数据库配置文件明文密码加密解密的问题

    有时候因为安全问题,需要把配置文件的中数据库用户名密码由明文改成密文,大多数其实是为了应付甲方而已. 1.pom.xml引入依赖 <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependenc

  • springboot项目数据库密码如何加密

    前言 在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄露了.今天就来聊聊在springboot项目中如何对数据库密码进行加密 正文 方案一.使用druid数据库连接池对数据库密码加密 1.pom.xml引入druid包 为了方便其他的操作,这边直接引入druid的starter <dependency> <groupId>com.alibaba</gr

  • SpringBoot项目配置明文密码泄露问题的处理方式

    目录 项目配置明文密码泄露问题的处理 1.使用系统环境变量储存密码 2.密码还是写在程序的配置文件里 给配置文件中用户名密码加密 原配置文件内容 详细操作步骤 新配置文件内容 项目配置明文密码泄露问题的处理 在项目开发过程中,需要配置数据库连接密码.Redis密码.网盘上传的AK/SK等敏感信息,都需要保存在配置文件里,或者配置中心. 这些信息如果泄露,还是会造成一定的困扰,这里介绍2种处理方案: 1.使用系统环境变量储存密码 比如K8S的环境变量.Windows的环境变量.Centos的环境变

  • IDEA SpringBoot项目配置热更新的步骤详解(无需每次手动重启服务器)

    IDEA SpringBoot项目配置热更新的步骤 1.在pom.xml中添加依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> 2.在pom.xml中添加插件: <

  • IDEA SpringBoot 项目配置Swagger2的详细教程

    原先前后端分离的api文档开启了前后端相互撕逼的对接之路 api更新不及时导致对接失败,以及存在测试不够方便,而swagger则很好的解决了这个问题 在项目中也经常用到swagger2,于是动手记录一下swagger2配置过程,希望能带来一点帮助. 在SpringBoot项目当中使用Swagger主要分为以下几步: 1.SpringBoot-web项目并添加pom.xml依赖 2.编写HelloController,测试成功运行 3.创建一个SwaggerConfig类,配置swagger-ui

  • springboot项目配置logback日志系统的实现

    记录springboot项目配置logback日志文件管理: logback依赖jar包 SpringBoot项目配置logback理论上需要添加logback-classic依赖jar包: <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <

  • springboot项目配置swagger2示例详解

    swagger简介 Swagger是一款RESTful接口的文档在线自动生成.功能测试功能框架.一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务,加上swagger-ui,可以有很好的呈现. 当我们在后台的接口修改了后,swagger可以实现自动的更新,而不需要人为的维护这个接口进行测试. 一.swagger2中常用的注解作用 注解 作用 @Api 修饰整个类,描述Controller的作用 ,表示标识这个类是swagger的资源 @ApiOperation 描述

  • springboot项目启动后执行方法的三种方式

    目录 1 方法 方法1:spring的ApplicationListener< ContextRefreshedEvent>接口 方法2:springboot的ApplicationRunner接口 方法3:springboot的CommandLineRunner接口 2 指定执行顺序 3 原理 springboot项目启动后执行方法,有三种实现方式. 1 方法 ApplicationListener< ContextRefreshedEvent> 不推荐 ApplicationL

  • SpringBoot Shiro配置自定义密码加密器代码实例

    shiro主要有三大功能模块: 1. Subject:主体,一般指用户. 2. SecurityManager:安全管理器,管理所有Subject,可以配合内部安全组件.(类似于SpringMVC中的DispatcherServlet) 3. Realms:用于进行权限信息的验证,一般需要自己实现. 细分功能 1. Authentication:身份认证/登录(账号密码验证). 2. Authorization:授权,即角色或者权限验证. 3. Session Manager:会话管理,用户登录

  • vue项目配置sass及引入外部scss文件方式

    目录 配置sass及引入外部scss文件 配置sass 引入外部scss文件 如果显示错误为如下图所示 记住此时需要重启项目 npm run dev 踩过的坑 Vue引入Sass文件 问题来了,为什么呢? 配置sass及引入外部scss文件 配置sass 安装对应依赖node模块 npm install node-sass --save-dev npm install sass-loader --save-dev 引入外部scss文件 在main.js中引入需要的scss文件 如果显示错误为如下

  • SpringBoot 在项目启动之后执行自定义方法的两种方式小结

    目录 SpringBoot 项目启动之后执行自定义方法的两种方式 方式一 实现 CommandLineRunner 接口 方式二 实现 ApplicationRunner 接口 二者区别 Springboot 项目启动后执行某些自定义代码 SpringBoot 项目启动之后执行自定义方法的两种方式 在测试配置中心的配置时,想在项目启动成功之后打印配置项,然后需要执行自定义的类 一般项目中也会在这个地方进行初始化数据的一些操作 方式一 实现 CommandLineRunner 接口 自定义类并实现

随机推荐