近期在进行项目安全方面评审时,质量管理部门有提出须要对配置文件中的敏高文件进行加密处理,避免了信息泄露问题。想一想前段时间某公司上传github时,把相应的生产数据库明文密码也一并上传了,致使了相应的数据泄露问题。也确实,大部分项目不管开发、测试仍是生产环境,相关的敏高信息都是明文存储的,也是一大安全隐患呀。因此今天来讲说,如何对配置文件进行加密操做。java
Jasypt是一个Java库,容许开发人员以很简单的方式添加基本加密功能,而无需深刻研究加密原理。利用它能够实现高安全性的,基于标准的加密技术,不管是单向和双向加密。加密密码,文本,数字,二进制文件。git
官网:http://www.jasypt.org/github
SpringBoot
中集成Jasypt
,可直接使用开源的jasypt-spring-boot
直接集成,使用简单方便。spring
0.引入pom依赖数据库
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>1.18</version> </dependency>
1.设置盐值和修改相应须要加密的配置参数vim
# 须要解密的地方,使用ENC()进行包裹处理 okong.name=ENC(Xj7Ykn2O0Hni/tN4oojPfw==) # 设置盐值,生产环境中,切记不要直接进行设置,可经过环境变量、命令行等形式进行设置。 jasypt.encryptor.password=lqdev
简单来讲,就是在须要加密的值使用ENC(
和)
进行包裹,即:ENC(密文)
。若想避免参数冲突,可修改前缀和后缀,能够直接使用jasypt.encryptor.property.prefix
和jasypt.encryptor.property.suffix
进行修改便可。安全
以后想往常同样使用@Value("${}")
便可。springboot
在一些使用
javaBean
配置和xml
两种混合模式时,使用第一种配置时,xml
参数并未替换。此时看了官方文档,可使用另外一方式进行配置便可。bash
0.引入pom依赖微信
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId> <version>1.18</version> </dependency>
其实就是不进行自动配置而已。
1.启动类启动方式修改。
@SpringBootApplication @Slf4j public class JasyptApplication { public static void main(String[] args) throws Exception { // SpringApplication.run(JasyptApplication.class, args); //使用自定义环境变量 实现一些特殊场景下的加密字符解密操做 //若无额外的xml引入文件须要解密时,可直接使用SpringApplication.run(JasyptApplication.class, args);便可 //若想在引入的xml中使用,须要加入环境变量,如如下模式 new SpringApplicationBuilder().environment(new StandardEncryptableEnvironment()) .sources(JasyptApplication.class).run(args); log.info("spring-boot-jasypt-chapter37服务启动!"); } }
Key | Required | Default Value |
---|---|---|
jasypt.encryptor.password | True | 盐值,根密码 |
jasypt.encryptor.algorithm | False | PBEWithMD5AndDES |
jasypt.encryptor.keyObtentionIterations | False | 1000 |
jasypt.encryptor.poolSize | False | 1 |
jasypt.encryptor.providerName | False | SunJCE |
jasypt.encryptor.providerClassName | False | null |
jasypt.encryptor.saltGeneratorClassname | False | org.jasypt.salt.RandomSaltGenerator |
jasypt.encryptor.ivGeneratorClassname | False | org.jasypt.salt.NoOpIVGenerator |
jasypt.encryptor.stringOutputType | False | base64 |
jasypt.encryptor.proxyPropertySources | False | false |
为了方便运维人员对各种敏感密钥进行加密操做,提供了自动化脚本,方便生成相应的加密串。
自己加解密过程都是经过
盐值
进行处理的,因此正常状况下盐值
和加密串
是分开存储的。盐值
应该放在系统属性
、命令行
或是环境变量
来使用,而不是放在配置文件。
java -jar xxx.jar --jasypt.encryptor.password=xxx &
设置环境变量:
# 打开/etc/profile文件 vim /etc/profile # 文件末尾插入 export JASYPT_PASSWORD = xxxx
启动命令:
java -jar xxx.jar --jasypt.encryptor.password=${JASYPT_PASSWORD} &
为了方便,简单编写了一个bat脚本方便使用。
@echo off set/p input=待加密的明文字符串: set/p password=加密密钥(盐值): echo 加密中...... java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=%input% password=%password% algorithm=PBEWithMD5AndDES pause
注意:jasypt-1.9.2.jar
文件须要和bat脚本放在相同目录下。此包可直接在示例项目中直接下载。
使用示例:
注意:相应加密串,每次加密的结果是不一样的。
本章节主要简单介绍了如何使用
jasypt
对配置文件进行加密操做。一些其余高级应用,能够查看官方文档进行相关集成便可。集成起来相对来讲比较简单,注意是要对密码(盐值)
的管理,须要进行安全把控下,建议运维人员针对每一个项目进行不同的盐值操做,避免一个项目泄露了,形成其余关联项的信息泄露。安全无大小呀,仍是谨慎为妙!
目前互联网上不少大佬都有
SpringBoot
系列教程,若有雷同,请多多包涵了。原创不易,码字不易,还但愿你们多多支持。若文中有所错误之处,还望提出,谢谢。
499452441
lqdevOps
我的博客:http://blog.lqdev.cn
完整示例:https://github.com/xie19900123/spring-boot-learning/tree/master/chapter-37
原文地址:https://blog.lqdev.cn/2019/05/08/springboot/chapter-thirty-seven/