服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 使用Springboot对配置文件中的敏感信息加密

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

2021-11-18 10:31iFence Java教程

这篇文章主要介绍了使用Springboot对配置文件中的敏感信息加密方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

前言

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

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

项目配置

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

添加依赖

?
1
2
3
4
5
6
<!-- jasypt场景启动器依赖 -->
<dependency>
    <groupid>com.github.ulisesbocchio</groupid>
    <artifactid>jasypt-spring-boot-starter</artifactid>
    <version>2.1.0</version>
</dependency>

修改明文密码

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

?
1
2
3
4
5
6
7
8
9
10
11
# 原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使用加密的配置属性

依赖:

?
1
2
3
4
5
<dependency>
    <groupid>com.github.ulisesbocchio</groupid>
    <artifactid>jasypt-spring-boot-starter</artifactid>
    <version>1.16</version>
</dependency>

1、加密属性配置

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

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

其中

?
1
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

延伸 · 阅读

精彩推荐
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06