使用Springboot对配置文件中的敏感信息加密

作者:iFence 时间:2021-05-24 10:50:25 

Springboot对配置文件的敏感信息加密

前言

最近公司对软件的安全问题比较在意,要求对配置文件中的敏感信息如数据库密码等进行加密。但是Springboot是一款高度集成的框架,如果仅仅是简单的对数据库密码进行加密了,由于连接数据库的操作是框架自己完成的,这就会造成不小的麻烦。

经过调研,找到了如下方式还比较方便。

项目配置

该项目用到了jasypt库。原理很简单,通过该库提供的方法进行敏感信息加密,生成密文xxxxx,然后将密文使用ENC()包裹起来。

添加依赖


<!-- jasypt场景启动器依赖 -->
<dependency>
   <groupId>com.github.ulisesbocchio</groupId>
   <artifactId>jasypt-spring-boot-starter</artifactId>
   <version>2.1.0</version>
</dependency>

修改明文密码

配置文件中密码将原来的明文密码改为ENC(密文密码)的样子,如下:


# 原MySQL密码,删掉不用
#spring.datasource.password=xxxx
# 加密后的MySQL密码
spring.datasource.password=ENC(BSYVaS0K9UEIIZACPLduGUumokOpB44c==)
# 如果是其他需要加密的密码,比如es密码es123456
es.password=ENC(xxxxxxx)
# 加密密码所需要的盐(随便写)。为了更加安全,这一行配置不要写在配置文件中,可以写在启动参数中
jasypt.encryptor.password=nmyswls
# 指定使用的算法
# 可选算法有:PBEWITHHMACSHA512ANDAES_256、PBEWITHHMACSHA512ANDAES_128、PBEWithMD5AndDES
jasypt.encryptor.algorithm=PBEWithMD5AndDES

生成加密字符串

加密过程中需要使用到盐,盐的设置不要太随意,因为原则上盐不能存储又不能忘记,所以尽量遵循一定的命名规则,供内部人员依据规则判断盐是什么。

# 其中下面运行的jar包为上面maven依赖中所指定的jar包,input参数为需要加密的字符串,password参数为加密所需的盐。 java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="str" password="salt" algorithm=PBEWithMD5AndDES

上述jar包可以从maven中央仓库中下载。

注意事项

由于该方法是对称加密方式,因此系统在解密的时候同样需要此盐,但是盐一定不能对外暴露。因此在第二步配置文件中并没有配置解密所需的盐,而是改用在系统启动时通过命令行传参的方式传入。

总结一下

  • 本方案依赖jasypt库,可以对配置文件中任意字符串进行加密,不仅仅局限于密码,更不仅仅局限于mysql密码。

  • 由于采用对称加密算法,如果泄露了加密需要的盐(上文提到的jasypt.encryptor.password参数),很容易对密码进行解密。因此加密用的盐需要写在配置文件外面,启动参数中。

springboot使用加密的配置属性

依赖:


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

1、加密属性配置

在application.properties或者相应的proffile的properties文件

使用Springboot对配置文件中的敏感信息加密

其中


jasypt.encryptor.password = klklklklklklklkl 是加解密的盐

enc是加密变量使用的特殊符号.

2、也可以把这些配置

到apollo中如果使用了apollo配置中心

使用Springboot对配置文件中的敏感信息加密

代码执行的效果

使用Springboot对配置文件中的敏感信息加密

参考:

https://github.com/ulisesbocchio/jasypt-spring-boot

https://github.com/ctripcorp/apollo-use-cases/tree/master/spring-boot-encrypt

本文目的是说明这个是springboot支持的 既支持普通boot项目 也可以用于apollo配置中心

来源:https://blog.csdn.net/Vector97/article/details/118228685

标签:配置文件,敏感信息,加密
0
投稿

猜你喜欢

  • Java实现提取QSV文件视频内容

    2023-08-24 13:33:45
  • 详解Java数据库连接JDBC基础知识(操作数据库:增删改查)

    2023-08-22 23:47:37
  • IDEA不编译除了.java之外的文件的解决办法(推荐)

    2023-09-16 15:50:44
  • 详解Java中的反射机制和动态代理

    2023-11-27 15:41:00
  • Java常见数据结构面试题(带答案)

    2023-11-24 19:44:05
  • JavaEE7+Websockets+GlassFish4打造聊天室

    2023-11-29 01:01:39
  • Struts2学习笔记(8)-Result常用类型

    2023-06-05 11:10:19
  • Java数据结构及算法实例:三角数字

    2023-08-24 17:52:25
  • Java关键字this与super详解用法

    2023-05-28 05:28:04
  • Java程序图形用户界面设计之按钮与布局

    2023-07-18 07:03:21
  • 基于SpringBoot实现用户身份验证工具

    2022-05-08 18:37:29
  • Java应用开源框架实现简易web搜索引擎

    2023-08-22 20:20:54
  • Java实现文件切割拼接的实现代码

    2022-04-15 08:10:03
  • idea 创建properties配置文件的步骤

    2023-11-18 18:03:30
  • mybatis 对于生成的sql语句 自动加上单引号的情况详解

    2023-09-21 15:25:00
  • 代码分析Android消息机制

    2023-07-26 09:44:44
  • 详解spring中的Aware接口功能

    2023-07-02 00:36:01
  • Java新手环境搭建 Tomcat安装配置教程

    2021-08-19 08:06:23
  • 常见的java面试题

    2023-11-26 18:03:44
  • Proxy实现AOP切面编程案例

    2023-07-23 06:44:52
  • asp之家 软件编程 m.aspxhome.com