SpringBoot配置文件敏感信息加密方案

news/2025/1/20 4:39:08/文章来源:https://www.cnblogs.com/ashet/p/18239074

在SpringBoot Project中,会将一些敏感信息配置到application.yml/application.properties配置文件中(同样适用于Spring Cloud的各个微服务其实(微服务实例)本质就是一个SpringBoot),例如数据库的用户名和密码、Redis的密码等。为了保证敏感信息的安全,我们需要将此类数据进行加密配置。

Jasypt方案

Jasypt: Java simplified encryption

以下实践在JDK21、SpringBoot3.3.0下成功验证,若你的JDK和SpringBoot版本有所差异,可能需要调整一些细节

pom.xml引入依赖

		<!-- https://mvnrepository.com/artifact/com.github.ulisesbocchio/jasypt-spring-boot-starter --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version></dependency>

加密你的敏感信息

public class TmpUtil {public static void main(String[] args) {BasicTextEncryptor textEncryptor = new BasicTextEncryptor();//加密所需的秘钥(salt),解密敏感信息仍旧需要改值textEncryptor.setPassword("ashe");//要加密的敏感信息String url = textEncryptor.encrypt("jdbc:mysql://${host}/${port}?serverTimezone=Asia/Shanghai");String username = textEncryptor.encrypt("username");String password = textEncryptor.encrypt("password");String driver = textEncryptor.encrypt("com.mysql.cj.jdbc.Driver");System.out.println("ENC("+url+")");System.out.println("ENC("+username+")");System.out.println("ENC("+password+")");System.out.println("ENC("+driver+")");System.out.println(textEncryptor.decrypt(username));System.out.println(textEncryptor.decrypt(password));}
}

application.yml填写加密后的密文

spring:datasource:url: ENC(xxxx)username: ENC(xxxx)password: ENC(xxxx)driver-class-name: ENC(xxxx)#jasypt:
#  encryptor:
#    password: ashe # 替换为你自己的密钥
#    iv-generator-classname: org.jasypt.iv.NoIvGenerator
#    algorithm: PBEWithMD5AndDES

Jasypt库所使用的默认加密算法为PBEWithMD5AndDES,其需要解密的内容需要用ENC()包裹(你可以自定义选择其他加密算法),如果在配置文件中直接展示你的秘钥,那么密文将很容易被解密出原文,因此一般不建议在配置文件中展示,而是通过启动脚本的方式来告诉Jasypt秘钥值,用以解密密文。

IDEA中本地启动设置VM Options

-Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES

-Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES

Linux中的启动脚本

#!/bin/bash# Start the application with the Jasypt encryptor password (replace with your actual start command)
java -Djasypt.encryptor.password=ashe -Djasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator -Djasypt.encryptor.algorithm=PBEWithMD5AndDES -jar your-application.jar

较低版本的jasypt似乎不需要显式指定iv-generator-classname和algorithm

其他方案

  • Druid方案
  • Spring Cloud Vault 加密

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/722037.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pythontqdm实现git进度条效果

注意1:这里是在python3环境下使用的git,安装要使用 pip install Gitpython 来安装在python环境下的git 注意2:这个方法可适用于 windows 环境和 Linux 环境import git import tqdmrepo_url = https://gitee.com/alichinese/oebuild-bin.git local_path = F:\\test\\oebuild-…

重生之我在男航学Java-2

一、前言答题判题程序-4 新增内容:选择题,填空题,输出顺序的变化,考虑多个同学有多张不同试卷的答卷的情况 新增知识点:抽象类的运用; 在设计好前三次的题目集的情况下,将原本的题目类设计为抽象类(本来在第一次题目集的时候就可以如此设计,但是当时学的不够多),同时…

PTA三次作业总结(2)

前言 这三次PTA难度不一,题目集四的题目是在之前的基础上迭代的,因为已经经过了几次的迭代,题目的难度较大,五、六则是新题目,以及在新题目上的迭代,五难度还好,六难度稍微大一点。 设计与分析 4-7-1(题目) 设计实现答题程序,模拟一个小型的测试,要求输入题目信息、…

解决系统too many open files

.背景nofile不足引起的too many open files故障报警频繁出现2.文件描述符的定义与功能文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件…

miniconda的安装及使用

去年我在调研AIGC软件的时候,遇到有一些项目需要用到conda安装库。不过用得比较少,而且用pip也完全可以胜任,我就没有特意去学。不过这种事情吧……大刘说了,这玩意就像埋在后院里的尸体,埋得再深也没用,睡不好觉。早晚有一天你得把它挖出来,扔得远远的。 最近做的项目中…

RustDesk 搭建

Web、API 部署教程:https://www.52pojie.cn/thread-1708319-1-1.html RustDesk 服务端下载:https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载:https://github.com/rustdesk/rustdesk/releases/tag/1.2.3-2 RustDesk 官方部署教程:https://rustde…

window下的随机数与随机数种子——[MTCTF 2021]Random

题目 Die IDA main函数 dword_1B336C 与 v7 ,是两个记录循环次数的计数器 红框:加密逻辑,很简单 绿框:成功条件,需要满足两个,第一个是 dword_1B336C == 43 ,当 dword_1B336C 不等于43的时候进入else,然后需要满足条件 input[v9] == key[v8] 与 v7 == 42 key0x3E, 0x…

【NAS】绿联NAS UGOS PRO 使用natfrp(Sakura Frp)内网穿透访问Docker应用

配置加速 https://registry.cn-hongkong.aliyuncs.com 下载镜像 创建容器 【容器】-【创建】-【手动创建】- 选择你下载的镜像即可在日志中查看密码访问容器 以HTTPS方式访问容器输入从日志中得到的密码。 然后去官网查看访问密钥(不知道官网的就去看截图上的URL)将得到的密钥…

靶机练习:born2root

信息收集 扫描全端口以发现服务发现端口80端口信息: Secretes Company / robots.txt / Wordpress-blog 访问80端口web服务About Us的用户名可以记录下来:Martin Hadi Jimmy robots.txt 有两个路径: /wordpress-blog /files 分别访问一下好像暂时没什么东西,拿用户名可以先爆破…

【进程间通信】——共享内存

目录共享内存 (Shared Memory)前言虚拟内存驻留内存System V 共享内存函数及其用途 Unix系统的System-V版本中就引入了三种进程间通信方式,分别是消息队列、共享内存、信号量集。这三种通信方式也被称为System-V IPC对象。 共享内存 (Shared Memory) 前言 ​ 在下文或接下来的…

对题目集4~6的总结

1.前言答题判题程序-4是前几次题目迭代,在前几次的基础上新增加了选择、填空题,按照之前的思路拓展即可。 家居强电电路模拟程序-1、2总体难度适中,不过与普通的信息处理相比,分配电压要考虑更多情况。2.设计与分析答题判题程序-4点击查看题目 设计实现答题程序,模拟一个小…