jasypt配置文件明文加密
最近有个springboot项目上线前进行安全检测,使用fortify扫描出配置文件的明文存储安全漏洞(Password Management: Password in Configuration File)
于是在各个博客中看到使用jasypt进行加密,自己实现后发现还是挺方便简单的,自己做个总结并当作笔记记录下来。
实现配置存储的明文加密只需要以下几步:
一、项目中引入依赖(Maven)
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.14</version>
</dependency>
二、自行对密码进行加密
引入依赖后,找到自己的maven库的地址,可直接在地址上cmd,也可直接cmd加上依赖的全路径进行命令加密,如下:
java -cp E://repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="testpwd" password=TEST@123 algorithm=PBEWithMD5AndDES
说明:
input:需要加密的明文密码
password:加密密钥
执行命令后,会回显以下内容:
说明:
OUTPUT则是加密后的密码,直接拿去配置即可。
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.121-b13
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: testpwd
password: TEST@123
----OUTPUT----------------------
daEYSmbUgjeKti146U2fDtSSaUbIpQA=
三、进行配置
配置的格式: ENC(加密后的密文)
如:
login.password=ENC(daEYSmbUgjeKti146U2fDtSSaUbIpQA=)
<通过项目的启动,配置上加密密钥后,会根据密钥自行解析成testpwd>
四、配置加密密钥(有两种方式)
1、一种是直接在配置文件进行密钥的配置(但有的人会认为此方式又是一种明文存储)
2、在启动命令中配置JVM参数
在启动命令中配置JVM参数(jasypt.encryptor.password),注入加密密钥,如:
java -Dfile.encoding=UTF8 -Djasypt.encryptor.password=TEST@123 -jar -Xmx512m settlement.jar
注:在docker容器中密文的密码可以设置成环境变量(如:JASYPT_PASSWORD ),上述命令可以修改为:
java -Dfile.encoding=UTF8 -Djasypt.encryptor.password=${JASYPT_PASSWORD} -jar -Xmx512m settlement.jar
参考文档
https://www.ricston.com/blog/encrypting-properties-in-spring-boot-with-jasypt-spring-boot/
https://github.com/ulisesbocchio/jasypt-spring-boot
https://www.cnblogs.com/zz0412/p/jasypt-001.html