Spring Boot 2.x基础教程:加密配置中的敏感信息

在之前的系列教程中,我们已经介绍了非常多关于Spring Boot配置文件中的各种用法。

这些配置相关的知识都是Spring Boot原生就提供的,而今天我们将介绍的功能并非Spring Boot原生就支持,但却非常有用:配置内容的加密。

为什么要加密?

一般情况下,为了方便切换环境,我们会将关于环境的信息存放在配置文件中,例如mysql的账号密码,redis的账号密码,支付宝、微信的密钥等等。

这些信息是极为敏感的信息,一旦泄露,会造成很大的损失。因此,一般开发者会将配置文件中进一步加密,避免这些敏感信息让不法分子直接获取。

一. 引入 jasypt

下面我们将使用 https://github.com/ulisesbocchio/jasypt-spring-boot 这个开源项目提供的实现和插件,来帮助我们轻松的完成配置信息的加密。

第一步:创建一个基础的Spring Boot项目(如果您还不会,可以参考这篇文章:快速入门)

第二步:引入 jasypt


    com.github.ulisesbocchio
    jasypt-spring-boot-starter
    3.0.3

第三步:将数据库的用户名和密码进行加密

@Test
    public void contextLoads() {
        BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        // 加密所需的salt(盐)
        textEncryptor.setPassword("10qyubgc");
        // 要加密的数据(数据库的用户名或密码)
        String username = textEncryptor.encrypt("root");
        String password = textEncryptor.encrypt("password");
        System.out.println("username:"+username);
        System.out.println("password:"+password);
    }

控制台输出:

username:xkPw7rH78Y+4VORyB/7Rhw==
password:DTlViR/goGloKmaFI1DBE17+lchmiA3O

使用 jasypt jar包进行加密

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=10qyubgc algorithm=PBEWithMD5AndDES input=root

控制台输出:

----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.171-b11
 
----ARGUMENTS-------------------
input: root
algorithm: PBEWithMD5AndDES
password: 10qyubgc 
 
----OUTPUT----------------------
xkPw7rH78Y+4VORyB/7Rhw==

拷贝-OUTPUT-下的结果即可

2. 配置properties文件

将生成的加密串配置ENC(加密串)到 application.yml

server:
  port: 8090
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: ENC(xkPw7rH78Y+4VORyB/7Rhw==)
    password: ENC(DTlViR/goGloKmaFI1DBE17+lchmiA3O)
    data-username: com.mysql.cj.jdbc.Driver
  jpa:
    show-sql: true
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
    database: MYSQL
    hibernate:
      ddl-auto: update
jasypt:
  encryptor:
    password: 10qyubgc # 加密所需的salt(盐)
    #algorithm: PBEWithMD5AndDES   # 默认加密方式 PBEWithMD5AndDES,可以更改为 PBEWithMD5AndTripleDES

加密方式对应的类为 BasicTextEncryptor 和 StrongTextEncryptor

private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
 
    public BasicTextEncryptor() {
        this.encryptor.setAlgorithm("PBEWithMD5AndDES");
    }
private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
 
    public StrongTextEncryptor() {
        this.encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
    }

Spring Boot 2.x基础教程:加密配置中的敏感信息_第1张图片

3. 部署时配置 salt (盐值)

为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值

java -jar -Djasypt.encryptor.password=10qyubgc xxx.jar

在环境变量中配置 salt 值

打开/etc/profile文件
vim /etc/profile
 
文件末尾插入
export JASYPT_PASSWORD = 10qyubgc
 
编译 
source /etc/profile
 
运行 
java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar

而此时,配置文件中已经是加密内容了,敏感信息得到了保护。

你可能感兴趣的:(javaspringboot)