使用jasypt 进行配置文件加密
项目中application.yml 配置文件的各种链接的username,password的值都是明文的,其实存在一定的安全隐患,这是可以使用jasypt 的方式进行明文加密,
需要注意的是 盐值和密文分开保存
下面实现最简单的配置
项目是springboot 框架
1.应用pom 文件
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
2.yml 配置中添加 jasypt的盐值
盐值用来加解密的,但是配置再这里明显是不合适的,因为知道了盐值,也就可以加解密了,相当于没有使用jasypt,参考这篇文章: jasypt加密 的方式 把盐值和密文分开保存
jasypt: encryptor: password: 123456789
3.使用jasypt 类加密明文
直接使用test生成密文是其中一种方式,其它方式 参考 参考这篇文章: jasypt加密
@Test @Test public void test(){ StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor(); //盐值 standardPBEStringEncryptor.setPassword("Saltvalue"); //加密明文 String code = standardPBEStringEncryptor.encrypt("加密密文"); //第二次test,解密第一次test的密文 System.out.println(standardPBEStringEncryptor.decrypt("uiqiG5IN/zZLExCSfnemxGZrIG9kStej")); System.out.println("code=" + code); }
4.将生成的code配置到yml
test:
code: ENN(CBkS9ftxXVcLlg41W5+e+yHLPl8cSyzL)
5.使用加密后的值
@value("${test.code}") String code;
盐值和密文分开存储
之前是把盐值存储在配置文件实际上是否加密都成了问题了
盐值应该放在系统属性、命令行或是环境变量来使用
war包和jar包 两种方式是项目中实际用到的, 其它的参考
war包的项目
配置在tomcat 的配置文件 tomat/bin/Catalina.sh 的JAVA_OPTS值中 -Djasypt.encryptor.password=${salt}
启动tomcat 即可
jar包的项目
添加在start.sh 启动脚本中
java -jar xxx.jar --jasypt.encryptor.password=${salt}
执行脚本即可
war 包项目部署到tomcat 配置jasypt
实际就是tomcat的启动参数配置
到Tomcat的bin目录下,打开文件catalina.sh 添加jasypt.encryptor.password=“${salt} ”