spring boot 对数据库连接信息加密
一、前言
小永哥过往的工作经历中,有一件事情记忆深刻,起因是客户要求配置文件中不允许出现明文的数据库用户名和密码,需要加密,客户的要求非常有道理,将数据库登录信息配置成密文有助于提升系统的安全性。废话不多说,盘它。
二、实现步骤
2.1、在工程的pom文件中引入第三方依赖包
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
2.2、自定义一个秘钥并做好记录,后期需要通过这个秘钥将数据库用户名和密码进行加解密。
(没有什么要求,随便指定一个就行,可能123就是个不错的选择)
2.3、基于秘钥将数据库敏感信息加密,加密完记得解密一下保证密文是可用的。
package com.relation.test;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
/**
* @author huhy
* @version 1.0
* @Description:
* @ClassName Date:2025/2/26 22:05
*/
public class Demo {
public static void main(String[] args) {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
//配置文件中配置如下的算法
standardPBEStringEncryptor.setAlgorithm("PBEWithMD5AndDES");
//配置文件中配置的password
standardPBEStringEncryptor.setPassword("miyao");
//要加密的文本
String name = standardPBEStringEncryptor.encrypt("root");
String password = standardPBEStringEncryptor.encrypt("123456");
//将加密的文本写到配置文件中
System.out.println("name=" + name);
System.out.println("password=" + password);
//要解密的文本
String name2 = standardPBEStringEncryptor.decrypt(name);
String password2 = standardPBEStringEncryptor.decrypt(password);
//解密后的文本
System.out.println("name2=" + name2);
System.out.println("password2=" + password2);
}
}
2.4、更改配置文件
2.4.1、用密文形式的用户名和密码替换掉明文,切记要使用ENC()包起来,否则无法解密。

2.4.2、将秘钥、加密算法等信息也配置到配置文件

三、验证
3.1、本地启动项目,此次给数据库连接信息加密算是验证成功。
风险:本地环境验虽然可以启动,但是本地环境将秘钥和加密方式等都放到了配置文件,如果配置文件泄露,密文已然免不了泄露,正式环境还需要另谋出路。

3.2、解决秘钥存在配置文件存在的风险
3.2.1、先将秘钥信息从配置文件中删除

3.2.2、将秘钥参数设置到启动命令中,通过命令启动服务
命令:java -jar relation-admin.jar --jasypt.encryptor.algorithm=PBEWithMD5AndDES --jasypt.encryptor.password=miyao --jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator


3.2.3、通过命令启动使配置文件不再出现敏感信息,大大保证了敏感信息的安全性,以此类推还可以将redis、mq等连接信息也进行加密。
四、结语
本次小永哥分享了配置文件敏感信息加密方案,后边陆续还会记录一些关于redis的使用方式及场景,希望可以和大家一起进步,谢谢。
更多推荐
所有评论(0)