springboot整合jasypt加密yml配置文件

一、前言

通常项目配置文件中的账号信息如下,都是直接暴露出来的,如果源码不小心泄露将会引起一系列安全问题

二、解决

  1. 通过配置中心动态加载配置文件

  2. 通过jasypt加密组件进行加密/解密

三、实现

1、pom.xml中引入依赖

<!-- jasypt加密组件: https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter -->
<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

2、application.yml中配置加密密钥

# 配置加密密钥
jasypt:
  encryptor:
    password: zhong         # 这里密钥修改 随意

3、jasypt加密/解密测试类

public class JasyptTest {
    @Test
    public void test() {
        // 对应配置文件中配置的加密密钥
        System.setProperty("jasypt.encryptor.password", "zhong");
        StringEncryptor stringEncryptor = new DefaultLazyEncryptor(new StandardEnvironment());
        System.out.println("加密: " + stringEncryptor.encrypt("root"));
        System.out.println("解密: " + stringEncryptor.decrypt("上面加密的字符串"));
    }
}

4、修改yml配置文件账号信息为加密方式

spring:
    application:
        name: scheduled
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        name: defaultDataSource
        password: ENC(uBxFfL0wQd9sL9CLV1zZbg==)
        url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: ENC(BkmP68GGfNiTdQfZRXwoqA==)
jasypt:
    encryptor:
        password: zhong

四、扩展知识

自定义加密标识

jasypt默认使用ENC()来标识加密,加载配置的时候检测到ENC()即会自动解密

下面我们来尝试自定义一个加密标识,JAVA_ABE()

application.yml中新增如下配置:

jasypt:
  encryptor:
    property:
      prefix: JAVA_ABE(    # 加密前缀
      suffix: )                      # 加密后缀
    password: zhong        # 加密密钥

修改配置如下:

spring:
    application:
        name: scheduled
    datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        name: defaultDataSource
        password: JAVA_ABE(uBxFfL0wQd9sL9CLV1zZbg==)
        url: jdbc:mysql://127.0.0.1:3306/aj?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: JAVA_ABE(BkmP68GGfNiTdQfZRXwoqA==)
jasypt:
    encryptor:
        password: zhong

让加密更安全

虽然经过上文的加密,涉及信息安全的配置项肯定会变得更安全,这个是毫无疑问的!

但是假如配置文件里的自定义加密密钥jasypt.encryptor.password=zhong泄露了,那我们的加密字段也还是有可能被别人解密(毕竟还是写在了配置文件中),为此,有几项工作可以让加密变得更加安全。

方式一:直接作为程序启动时的命令行参数来带入

java -jar scheduled.jar --jasypt.encryptor.password=zhong

方式二:直接作为程序启动时的应用环境变量来带入

java -Djasypt.encryptor.password=zhong -jar scheduled.jar

方式三:甚至可以作为系统环境变量的方式来带入

jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:}

这样就安全多了

                                                        PS:加密密钥不要写在配置文件中 安全起见!

猜你喜欢

转载自blog.csdn.net/m0_61157117/article/details/125715621