使用Jasypt对SpringBoot配置文件加密

# **前言**
在日前安全形势越来越严重的情况下,让我意识到在项目中存在一个我们经常忽略的漏洞,那就是我们的项目的配置文件中配置信息的安全,尤其是数据库连接的用户名和密码的安全。所以这里我们就需要对数据库的用户名和密码进行加密,这也是本文的由来。本文采用Jasypt对Spring Boot配置文件加密的相关方法,其实呢,也还有其他方案,具体的会在后面的相关文章中说明。

# **引入jasypt**
```xml

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

```

# **1.生成要加密的字符串**
## 1.1 将数据库的用户名和密码进行加密
```java
@Test
public void contextLoads() {
BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
//加密所需的salt(盐)
textEncryptor.setPassword("1Qaz0oKm");
//要加密的数据(数据库的用户名或密码)
String username = textEncryptor.encrypt("root");
String password = textEncryptor.encrypt("root");
System.out.println("username:"+username);
System.out.println("password:"+password);
}
```

**输出信息**
```java
username:NZmLHOOHX0SEjc285iG9YQ==
password:1JByM5wu5o+9H1Ba2o++Pg==
2019-06-14 14:55:49.863 INFO 8904 --- [ Thread-3] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService ‘applicationTaskExecutor‘
2019-06-14 14:55:49.863 INFO 8904 --- [ Thread-3] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit ‘default‘
2019-06-14 14:55:49.863 INFO 8904 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2019-06-14 14:55:49.878 INFO 8904 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
```
## 1.2. 或者使用Maven下载好的jar包加密\Maven\org\jasypt\jasypt\2.0.0\jasypt-2.0.0.jar
```java
java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=1Qaz0oKm algorithm=PBEWithMD5AndDES input=root
```
**输出信息**
```java
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.171-b11

----ARGUMENTS-------------------
input: root
algorithm: PBEWithMD5AndDES
password: 1Qaz0oKm

----OUTPUT----------------------
NZmLHOOHX0SEjc285iG9YQ==
```
拷贝-OUTPUT-下的结果即可
# **2.配置properties文件**
将生成的加密串配置ENC(加密串)到application.properties中
```xml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
username: ENC(GHK23XVFNHoQQ97vIW523Q==)
password: ENC(aTKef0XcG05Cfzao92EqqQ==)
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: 1Qaz0oKm #加密所需的salt(盐)
#algorithm: PBEWithMD5AndDES # 默认加密方式PBEWithMD5AndDES,可以更改为PBEWithMD5AndTripleDES
```
**加密方式对应的类为BasicTextEncryptor和StrongTextEncryptor**
```java
private final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();

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

public StrongTextEncryptor() {
this.encryptor.setAlgorithm("PBEWithMD5AndTripleDES");
}
```
![图片.png](https://img2018.cnblogs.com/blog/1035487/201908/1035487-20190810225628072-1958209166.png)
# **3.部署时配置salt(盐)值**
**1. 为了防止salt(盐)泄露,反解出密码.可以在项目部署的时候使用命令传入salt(盐)值**
```java
java -jar -Djasypt.encryptor.password=1Qaz0oKm xxx.jar
```
**2. 或者在服务器的环境变量里配置,进一步提高安全性**
```java
打开/etc/profile文件
vim /etc/profile

文件末尾插入
export JASYPT_PASSWORD = G0CvDz7oJn6

编译
source /etc/profile

运行
java -jar -Djasypt.encryptor.password=${JASYPT_PASSWORD} xxx.jar
```

[下面是一个我自己的具体实现:https://github.com/eelve/jasypt,使用Jasypt对数据库用信息加密后,可以成功连接上数据库](https://github.com/eelve/jasypt)
![图片.png](https://img2018.cnblogs.com/blog/1035487/201908/1035487-20190810225628343-77717640.png)

[官方地址:https://github.com/ulisesbocchio/jasypt-spring-boot](https://github.com/ulisesbocchio/jasypt-spring-boot)

原文地址:https://www.cnblogs.com/eelve/p/11333368.html

时间: 2024-11-08 05:01:06

使用Jasypt对SpringBoot配置文件加密的相关文章

SpringBoot配置文件敏感信息加密-jasypt

使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysql登陆密码,redis登陆密码以及第三方的密钥等等一览无余,这里介绍一个加解密组件,提高一些属性配置的安全性. jasypt由一个国外大神写的一个springboot下的工具包.Git地址:https://github.com/ulisesbocchio/jasypt-spring-boot 直接上

.net C# 给配置文件加密--不同服务器共用同一个加密配置

.net C#  给配置文件加密--不同服务器共用同一个加密配置 保护配置提供程序 cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319     or  C:\Windows\Microsoft.NET\Framework\v4.0.30319 1创建一个可导出的rsa密钥容器,命名为Key aspnet_regiis -pc "EsdConnectionStringsKey" -exp 2在要加密的信息前面指定密钥容器,如: <c

SpringBoot 配置文件说明

SpringBoot 配置文件说明 默认配置文件:application.yml 或 application.properties 配置文件中属性允许使用占位符例如 ${port:80},运行时使用 Java -jar app.jar --server.port=8081 方式来传递参数 server.port 服务端口,默认为8080 server.port 最大超时时间(分钟),默认为30 server.address 该服务绑定IP地址,启动服务器时如本机不是该IP地址则抛出异常启动失败,

【日常错误】spring-boot配置文件读取不到

最近在用spring-boot做项目时,遇到自定义的配置文件无法读取到的问题,通过在appcation.java类上定义@PropertySource(value = {"classpath:XXX.properties"},encoding="utf-8"),然后在组件中使用@value等方式读取properties文件配置时,始终都是null值,最后发现是由于项目数据层是使用的EJB访问,然后在ejb-config.xml配置文件里定义了这样一个bean: &l

第四章 SpringBoot配置文件

1.springboot配置文件 SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置. SpringBoot默认会从Resources目录下加载application.properties或application.yml(application.yaml)文件,其中,application.properties文件是键

springboot配置文件抽离--git管理统一配置中心

springboot配置文件抽离,便于服务器读取对应配置文件,避免项目频繁更改配置文件,影响项目的调试与发布 1.创建统一配置中心项目conifg 1)pom配置依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</ver

SpringBoot配置文件application.properties数据库配置

1 #DB Configuration 2 spring.datasource.driver-class-name=com.mysql.jdbc.Driver 3 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone = GMT 4 spring.datasource.username=roo

【SpringBoot】SpringBoot配置文件及YAML简介

SpringBoot配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的; application.properties application.yml 配置文件的作用:修改SpringBoot自动配置的默认值; SpringBoot在底层就自动配置好; YAML简介 AML(YAML Ain't Markup Language) YAML A Markup Language:是一个标记语言 YAML isn't Markup Language:不是一个标记语言; 标记语言:

C#为配置文件加密的实现方法

利用ASP.NET注册工具ASPnet_regiis.exe注册IIS,该工具的名称为aspnet_regiis.exe,在32位机上,该工具存在于C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727,在64位机中“Framework”的名字为“Framework64”,不同的IIS版本“v2.0.50727”也可能有所改变. 当要用Web Service或Web项目调用一些外围设备时,使用该工具显得尤为重要,使用方法为: 进入上述的aspnet_regii