使用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文件
其中
jasypt.encryptor.password = klklklklklklklkl 是加解密的盐
enc是加密变量使用的特殊符号.
2、也可以把这些配置
到apollo中如果使用了apollo配置中心
代码执行的效果
参考:
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


猜你喜欢
- LinkedBlockingDeque介绍LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO
- 本文实例为大家分享了C++ socket实现miniFTP的方法,供大家参考,具体内容如下客户端:服务端:建立连接 &
- 使用ApplicationContext获取bean对象编写一个ApplicationContextFactory工厂类public cla
- 1、本篇内容本文让大家掌握 springmvc 中异步处理请求,特别牛逼的一个功能,大家一定要掌握。2、看段代码,分析问题@Response
- 本文实例讲述了Android编程实现的一键锁屏程序。分享给大家供大家参考,具体如下:据笔者了解,所有的Android手机都用电源键来手动锁屏
- pom.xml<dependency> <groupId>org.springframework.bo
- Android 7.0行为变更 FileUriExposedException解决方法当我们开发关于【在应用间共享文件】相关功能的时候,在A
- 本文实例为大家分享了WPF实现文字粒子闪烁动画的具体代码,供大家参考,具体内容如下实现效果如下:思路:首先根据显示文本创建文本路径Geome
- 根据使用泛型位置的不同可以分为:声明侧泛型、使用侧泛型。声明侧的泛型信息被记录在Class文件的Constant pool中以Signatu
- 详解java中保持compareTo和equals同步摘要 : 介绍重写equlas()和comparable接口,两者进行不相同的判断。从
- C#中属性的目的是对字段的封装,是为了程序数据的安全性考虑的。本文即以实例形式对C#中只读只写属性进行剖析。对于只读或只写的属性定义:1、不
- 本文实例讲述了C#警惕匿名方法造成的变量共享。分享给大家供大家参考,具体如下:匿名方法匿名方法是.NET 2.0中引入的高级特性,“匿名”二
- 前言之前的aop是通过手动创建代理类来进行通知的,但是在日常开发中,我们并不愿意在代码中硬编码这些代理类,我们更愿意使用DI和IOC来管理a
- 本文实例为大家分享了java + dom4j.jar提取xml文档内容的具体代码,供大家参考,具体内容如下资源下载页:点击下载本例程主要借助
- 本文实例分析了C#实现的24点游戏。分享给大家供大家参考。具体如下:1. 24点游戏规则及算法规则:给出4个自然数,找出能够求出24的四则运
- 1、比较器①比较器的引入a.首先,当我们单一地比较某一种数据类型的数组时,可以直接用Arrays.sort()进行实现b.而当我们同时含有多
- 主要介绍了Java获取随机数的3种方法,主要利用random()函数来实现方法1(数据类型)(最小值+Math.random()*(最大值-
- 当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面.这个启动界面或简单,或复杂,或简陋,或华丽,用意不同,风格也不同.下面来观摩几
- 前言本篇文章将教你作为一个.NET程序员如何快入门Spring Boot。你不需要用Eclipse,也不需要用IDEA。已经习惯了VS,其他
- 本文实例讲述了C#图像处理之边缘检测(Smoothed)的方法。分享给大家供大家参考。具体如下://定义smoothed算子边缘检测函数pr