加密Spring Boot项目中配置文件的明文密码

文章目录

  • 加密Spring Boot项目中配置文件的明文密码
    • 添加依赖和插件
    • 使用jasypt加密过程
    • 小结
    • 参考文档

加密Spring Boot项目中配置文件的明文密码

如果不想在Spring Boot项目配置文件存储明文密码(比如MySQL密码、Redis密码等),一种简单的方法的方法是运行Spring Boot应用时以注入环境变量的方式来注入密码,另外一种就是在配置文件中加密存储明文密码。

本文讲解了通过jasypt-spring-boot 加密Spring Boot项目中配置文件的明文密码。

添加依赖和插件

添加jasypt-spring-boot-starter依赖:

<dependency>
    <groupId>com.github.ulisesbocchiogroupId>
    <artifactId>jasypt-spring-boot-starterartifactId>
    <version>3.0.2version>
dependency>

添加jasypt-maven-plugin插件:

<plugin>
    <groupId>com.github.ulisesbocchiogroupId>
    <artifactId>jasypt-maven-pluginartifactId>
    <version>3.0.2version>
plugin>

使用jasypt加密过程

以加密MySQL密码为例。

加密前配置,MySQL密码以明文存储:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/test_db?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=springuser
spring.datasource.password=test123

使用jasypt-maven-plugin插件加密明文密码:

mvn jasypt:encrypt-value -Djasypt.encryptor.password="JasyPt@123" -Djasypt.plugin.value="test123" -Djasypt.encryptor.algorithm="PBEWithMD5AndDES"
  • jasypt.encryptor.password 是秘钥,尽量复杂!不能放在代码和配置文件里面!不能泄漏!
  • jasypt.plugin.value 是要加密的明文密码
  • jasypt.encryptor.algorithm默认加密算法是PBEWITHHMACSHA512ANDAES_256,需要有JCE(Java Cryptography Extension)支持,如果不想安装JCE,可以使用PBEWithMD5AndDES算法。

加密后的密码类似:

ENC(x5cSG923AtAKstkN5s4TuAHm2/Sw5vP4)

加密后配置:

spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/test_db?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8
spring.datasource.username=springuser
spring.datasource.password=ENC(x5cSG923AtAKstkN5s4TuAHm2/Sw5vP4)
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}

因为使用的不是默认的加密算法,因此需要指定jasypt.encryptor.algorithm

启动Spring Boot应用时传入JASYPT_ENCRYPTOR_PASSWORD环境变量作为秘钥:

  • 在Linux中,可以在~/.bashrc中定义:
export JASYPT_ENCRYPTOR_PASSWORD=JasyPt@123
  • 在Intellij IDEA中,可以在Run Configuration的Environment variables 中定义:
JASYPT_ENCRYPTOR_PASSWORD=JasyPt@123

小结

如果只看加密MySQL密码的例子,还体现不出这种做法的好处。但是当配置文件中有多个密码、Token等需要加密时,这个方法就比较方便了。

除了支持字符串秘钥,jasypt还支持key文件秘钥,更加安全。

在安全要求很高时,还可以使用使用jasypt默认的PBEWITHHMACSHA512ANDAES_256加密算法,该算法需要安装JCE支持。

参考文档

  • https://github.com/ulisesbocchio/jasypt-spring-boot-samples
  • https://www.cnblogs.com/zhangjianbing/p/9184083.html

你可能感兴趣的:(SpringBoot)