背景介绍:在我们的配置文件中有一些信息比较敏感,明文显示,安全性就比较低一些,比如数据库的用户名与密码,对此本文我们以SpringBoot项目为例将对用户名与密码进行加密!
案例
- 引入包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
jasypt由一个国外大神写了一个springboot下的工具包,用来加密配置文件中的信息。
- application.properties或application.yml配置加/解的密码
jasypt:
encryptor:
password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
- 在写的测试用例中生成加密后的秘钥
@RunWith(SpringRunner.class)
@SpringBootTest
public class SuccessTest {
@Autowired
private StringEncryptor encryptor;
@Test
public void getPass() {
String url = encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/kkb?autoReconnect=true&serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8");
String name = encryptor.encrypt("root");
String password = encryptor.encrypt("cmyroot");
System.out.println("database url: " + url);
System.out.println("database name: " + name);
System.out.println("database password: " + password);
Assert.assertTrue(url.length() > 0);
Assert.assertTrue(name.length() > 0);
Assert.assertTrue(password.length() > 0);
}
}
下面是输出加密字符串:
database url: 2UdKxOVXnPB6ZfsUOUEIFaEMLVzJnOzHKFOuacjdrImiNSuMGbWbR5G/0viQmtHvimD2CutZ/y7bLiOx3ewH/O3h6jGztEzNx/m1i0aP9CFTOuYkPvf6NFnbA0zbU8L4a6QsFdVLG5IFBWz+41sBIKCyZBY4eSnj92lvYftTiFA=
database name: qKVR5YJQIrG3iytBWFyYEg==
database password: 2D2yCkM3ws7CLL7VXxs0aA==
- 将加密后的字符串替换原明文
spring:
jpa:
generate-ddl: true
show-sql: true
hibernate:
ddl-auto: none
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: ENC(hA3JGlwMIqw8oGU9SqU7lxPuQT3qGL65gMhy77YV2fv0OeMe3pOW1rwx5M9ekWLoIOPKyiuIDBobtW8Y37/LwJ7d5NJtpBnhUwIK9Q6r3mZbispO9mKzkZxcxcVMp6kEmCDWD4TO93DO6bXjqSyLWn8zM0ge/9n2zOAgz+bz/bM=)
username: ENC(ddKnhp/x0Jck5A1b/TxLVA==)
password: ENC(hEuvGUnB6SBhT3jkVv8caA==)
jasypt:
encryptor:
password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7
明文密码加密成功! 如有不懂或者疑问请关注公众号:码农明明 即可获取项目源码并提出疑问
附言
部署时配置salt(盐)值
为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值:
java -jar xxx.jar -Djasypt.encryptor.password=Y6M9fAJQdU7jNp5MW
或者在服务器的环境变量里配置,进一步提高安全性.
打开/etc/profile 文件
vim /etc/profile
在profile 文件末尾插入salt(盐)变量
export JASYPT_PASSWORD = Y6M9fAJQdU7jNp5MW
编译,使配置文件生效
source /etc/profile
运行
java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
|