【已解决】【Java项目安全系列教程】Spring boot项目,怎么把配置文件中数据库用户名密码加密?

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 经验分享
  • 时间:2023-08-10 23:10
  • 2451人已阅读
简介 本文是以Jasypt开源加密库为例,来进行讲解的。是jasypt加密库的教程

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

场景:

在有些情况下,我们将代码打包之后,给客户,或者给对方演示的时候,为了安全考虑,我们会对项目做加密。

比如:对数据库信息加密、对编译后的class文件加密、对spring boot项目打成的jar加密。那么怎么做呢?

本文是:凯哥Java(kaigejava)编写的Java项目安全系列教程中的一篇,本片咱们就来讲讲怎么对spring boot项目的配置文件中文本加密。

使用工具:Jasypt加密

本文是以Jasypt开源加密库为例,来进行讲解的。是jasypt加密库的教程。

一、Jasypt 加密概述

PS: 可以直接跳过子这些概述。直接进入快速开发

1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。

2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中使用特定格式直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。

1)Jasypt 加密属性配置格式:secret.property=ENC(nrmZtkF7T0kjG/VodDvBw93Ct8EgjCA+),ENC() 就是它的标识,程序启动的时候,会自动解密其中的内容,如果解密失败,则会报错。

2)所以获取这些属性值和平时没有区别,直接使用如 @Value("${secret.property}") 获取即可,取值并不需要特殊处理。

3、jasypt  同一个密钥(secretKey)对同一个内容执行加密,每次生成的密文都是不一样的,但是根据根据这些密文解密成原内容都是可以的.

4、jasypt 官网:https://github.com/ulisesbocchio/jasypt-spring-boot。

5、在项目中集成 jasypt-spring-boot 有三种方法:

方法一

1、如果是 Spring Boot 应用程序,使用了注解 @SpringBootApplication 或者 @EnableAutoConfiguration,那么只需添加 jasypt-spring-boot-starter 依赖,此时整个 Spring 环境就会支持可加密属性配置(这意味着任何系统属性、环境属性、命令行参数,yaml、properties 和任何其他自定义属性源可以包含加密属性):

<dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot-starter</artifactId>
        <version>3.0.2</version>
</dependency>

方法二

1、如果没有使用 @SpringBootApplication 或者 @EnableAutoConfiguration,则将 jasypt-spring-boot 添加到类路径:

<dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot</artifactId>
        <version>3.0.2</version>
</dependency>

2、然后将 @EnableEncryptableProperties 添加到配置类中,以便在整个 Spring 环境中启用可加密属性:

@Configuration
@EnableEncryptableProperties
public class MyApplication {
    ...
}

方法三


1、如果不使用 @SpringBootApplication 或者 @EnableAutoConfiguration 自动配置注解,并且不想在整个 Spring 环境中启用可加密的属性,则有本方法,首先将以下依赖项添加到项目中:

<dependency>
        <groupId>com.github.ulisesbocchio</groupId>
        <artifactId>jasypt-spring-boot</artifactId>
        <version>3.0.2</version>
</dependency>

2、然后在配置文件中添加任意数量的 @EncryptablePropertySource 注解,就像使用 Spring 的 @PropertySource 注解一样:

@Configuration
@EncryptablePropertySource(name = "EncryptedProperties", value = "classpath:encrypted.properties")
public class MyApplication {
    ...
}

3、或者还可以使用 @EncryptablePropertySources 注解来对 @EncryptablePropertySource 类型的注解进行分组:

@Configuration
@EncryptablePropertySources({@EncryptablePropertySource("classpath:encrypted.properties"),
                             @EncryptablePropertySource("classpath:encrypted2.properties")})
public class MyApplication {
    ...
}

从 1.8 版起,@EncryptablePropertySource 支持 YAML 文件


二、Jasypt快速使用

2.1:不忘初心-获取密文

我们为什么要使用Jasypt?答:为了对配置文件中数据库的用户名和密码进行加密的。所以,我们第一步就是获取密文-就是将需要加密的数据进行加密。加密方式有很多中。为了方便,官方也提供了jar包,可以直接从命令行执行操作。这样就可以免去我们写代码了。当然,也可以直接使用代码进行加密的。下面咱们就先从官方提供的jar包,在命令行执行下加解密效果。

2.2.:使用官方jar包在命令行进行加解密操作

先下载官方提供的jar.目前最新版的maven坐标:

<!-- jasypt 对文本加密的-->
		<dependency>
			<groupId>org.jasypt</groupId>
			<artifactId>jasypt</artifactId>
			<version>1.9.3</version>
		</dependency>

大家也可以直接在maven仓库搜索:jasypt.或者直接点击此连接:https://mvnrepository.com/artifact/org.jasypt/jasypt

fd84d14bc4a3f8320a3a377b0049b233.png

通过maven下载需要的依赖

TopTop