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

 更新时间:2022年06月17日 08:47:05   作者:北亮bl  
这篇文章主要介绍了SpringBoot项目配置明文密码泄露问题的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

在项目开发过程中,需要配置数据库连接密码、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模块用户名和密码加密(涉及到启动项目后会在可视化平台输入用户名和密码)

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

相关文章

  • SpringBoot使用JdbcTemplate访问操作数据库基本用法

    SpringBoot使用JdbcTemplate访问操作数据库基本用法

    这篇文章主要介绍了SpringBoot使用JdbcTemplate访问操作数据库基本用法,Spring对数据库的操作在jdbc上s面做了深层次的封装,使用spring的注入功能,可以把DataSource注册到JdbcTemplate之中。下文详细内容需要的小伙伴可以参考一下
    2022-02-02
  • Spring中@Cacheable注解的使用详解

    Spring中@Cacheable注解的使用详解

    这篇文章主要介绍了Spring中@Cacheable注解的使用详解,Spring框架提供了@Cacheable注解来轻松地将方法结果缓存起来,以便在后续调用中快速访问,本文将详细介绍@Cacheable注解的使用方法,并从源码级别解析其实现原理,需要的朋友可以参考下
    2023-11-11
  • Dubbo架构整体设计详解

    Dubbo架构整体设计详解

    Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现,本文将从 Dubbo 整体架构的视角出发,带你从全局俯瞰 Dubbo 的架构设计,感兴趣的同学可以参考一下
    2023-04-04
  • Mysql存储java对象实例详解

    Mysql存储java对象实例详解

    这篇文章主要介绍了Mysql存储java对象实例详解的相关资料,需要的朋友可以参考下
    2016-11-11
  • Java数组的遍历与求和知识点

    Java数组的遍历与求和知识点

    本篇文章给大家总计了Java数组的遍历与求和的知识点以及需要注意的地方,需要的朋友参考学习下。
    2018-02-02
  • JAVA 数据结构链表操作循环链表

    JAVA 数据结构链表操作循环链表

    这篇文章主要介绍了JAVA 数据结构链表操作循环链表的相关资料,需要的朋友可以参考下
    2016-10-10
  • Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    Java设置Access-Control-Allow-Origin允许多域名访问的实现方法

    这篇文章主要介绍了Java设置Access-Control-Allow-Origin允许多域名访问的实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10
  • Java实现屏幕截图工具的代码分享

    Java实现屏幕截图工具的代码分享

    这篇文章主要为大家介绍了如何利用Java语言编写一个电脑屏幕截图工具,文中的示例代码讲解详细,对我们学习有一定的帮助,需要的可以参考一下
    2022-05-05
  • 完美解决request请求流只能读取一次的问题

    完美解决request请求流只能读取一次的问题

    这篇文章主要介绍了完美解决request请求流只能读取一次的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • springboot2.0 @Slf4j log 彩色日志配置输出到文件

    springboot2.0 @Slf4j log 彩色日志配置输出到文件

    这篇文章主要介绍了springboot2.0 @Slf4j log日志配置输出到文件(彩色日志),解决方式是使用了springboot原生自带的一个log框架,结合实例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-08-08

最新评论