详解如何保护SpringBoot配置文件中的敏感信息
如何保护SpringBoot配置文件中的敏感信息
使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些。
打开application.properties
或application.yml
,比如 MySql登陆密码,Redis登陆密码以及第三方的密钥
等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性。
jasypt由一个国外大神写了一个springboot下的工具包,用来加密配置文件中的信息。
GitHub Demo地址:https://github.com/jeikerxiao/spring-boot2/tree/master/spring-boot-encrypt
下面以数据库用户名和数据库密码加密为例进行介绍。
1、pom依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> </parent> <groupId>com.jasypt</groupId> <artifactId>spring-boot-jasypt</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-boot-jasypt</name> <description>如何保护 SpringBoot 配置文件中的敏感信息</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.4.5</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 加密包 --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
查看最新版本可以到:https://github.com/ulisesbocchio/jasypt-spring-boot
2、配置加/解的密码
# jasypt加密的密匙 jasypt: encryptor: password: Y6M9fAJQdU7jNp5MW
3、测试用例中生成加密后的秘钥
package com.jasypt; import org.jasypt.encryption.StringEncryptor; import org.junit.Assert; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class SpringBootJasyptApplicationTests { @Autowired private StringEncryptor encryptor; @Test public void getPass() { String url = encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/test"); String name = encryptor.encrypt("root"); String password = encryptor.encrypt("root"); 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: CCGZpukXHOy7xPMVm6//IZi3kQxJQmZuFdrje1KtshlZD0IiwrHTQWcB4J4l1qKe
database name: +DcWhoH0RuZck93R2FSEEg==
database password: gTVoDqbBeaTe2+omIsoXIA==
4、将加密后的字符串替换原明文
server: port: 8080 spring: # 数据库相关配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: CCGZpukXHOy7xPMVm6//IZi3kQxJQmZuFdrje1KtshlZD0IiwrHTQWcB4J4l1qKe username: +DcWhoH0RuZck93R2FSEEg== password: gTVoDqbBeaTe2+omIsoXIA== jpa: hibernate: ddl-auto: update show-sql: true # 返回的api接口的配置,全局有效 jackson: # 如果某一个字段为null,就不再返回这个字段 default-property-inclusion: non_null date-format: yyyy-MM-dd HH:mm:ss serialization: write-dates-as-timestamps: false time-zone: GMT+8 # jasypt加密的密匙 jasypt: encryptor: password: Y6M9fAJQdU7jNp5MW
5、部署时配置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
到此这篇关于详解如何保护SpringBoot配置文件中的敏感信息的文章就介绍到这了,更多相关SpringBoot保护配置文件敏感信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot项目中HTTP请求体只能读一次的解决方案
在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到SpringBoot HTTP请求只读一次的问题,本文给出了几种解决方案,需要的朋友可以参考下2024-08-08
最新评论