【配置文件密码加密】一种简单的在SpringBoot中非明文配置密码的实现方案

server/2025/1/24 18:07:13/

【配置文件密码加密】一种简单的在SpringBoot中非明文配置密码的实现方案

  • 在一些项目中,应各方要求,密码不能直接配置在配置文件中,否则会报高危风险。为简化配置、提高安全程度,此处设计了一种密码加密方式,使用这种方式可以不让开发人员知晓密码,仅部署人员知晓,且对部署人员只提供加密方法不提供解密方法。
  • 此方法无法应对反编译,如果要应对反编译,可以采用一些混淆、密钥授权等方案,这里大家一起讨论下,有没有只需要本机计算又比较安全的方案
  • 这种方式甚至可以把使用的哪个数据库、数据库在哪个服务器都隐藏起来
  • 主要目的是降低配置文件被提取到之后导致敏感信息泄露

一、通常的不安全做法示例

  • 通常情况下,我们开发Spring Boot/Cloud时会将基本的密码配置在yml、properties文件或配置中心中,这些方法都是明文配置密码的,存在高危风险。通常的配置方法如下:
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456

二、按照本方案后,配置文件的配置

  • 按本方案操作后,上文代码中password可以不填或者填写一些误导的内容,如
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghaiusername: rootpassword: 一个错误的密码#或者干脆不输入内容#password: 

三、系统改造

  • 此部分讲述系统的改造方法,想先了解运维人员如何使用的,可先看第四部分

1.加密方法

  • 提供一个加密工具类,Spring Boot的main方法加载的时候,就执行这个方法,对mian的String[] args的参数进行修改
  • 即:通过改变启动参数的方式配置密码
  • 此处不做赘述,请各位大佬阅读代码

import cn.hutool.core.io.FileUtil;
import cn.hutool.json.JSONArray;
import lombok.extern.slf4j.Slf4j;import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.io.File;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64

http://www.ppmy.cn/server/161079.html

相关文章

仿 RabbitMQ 的消息队列3(实战项目)

七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了,下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录:public void createQueueFile(String queueName) throws IO…

踏浪而行,2024年技术创作的星光轨迹

文章目录 起点:偶然的契机,迈出的第一步🌱初心:从小小尝试到逐步上路📝进步与挑战:从基础到深度的跃升🚀数据与反馈:不断激励的动力📊创作与学习:两者相辅相成…

Android中关于View的几种属性赋值方式

我们以给TextView组件设置颜色属性展开讲解 1、xml中直接定义(设定TextView为黑色) 2、xml 中 引用style(设定TextView为蓝色) 3、在theme 中直接定义(设定TextView紫色) 4、在主题中添加对样式资源的引用…

小哆啦的编程冒险:罗马数字转整数

小哆啦的编程冒险:罗马数字转整数 小哆啦开始力扣每日一题的第十四天 13. 罗马数字转整数 - 力扣(LeetCode) 第一章:初遇迷宫,switch 之路 一开始,小哆啦进入了编程的世界,就像进入了一个神秘的…

JAVA与数据结构-线性表

目录 一.线性表的概念 二.线性表的关系及分类 三.数组与顺序表 四.链表 1.静态链表(链表的的数组底层实现) 2.循环链表 3.双向链表 五.栈 1.栈的概念 2.栈的底层实现 3.共享空间栈 4.逆波兰表达式(后缀表达式) 5.栈与递归 六.…

计算机系统原理:一些断言

0 虚拟机和解释器 在Java中,JVM既充当了一个虚拟机的角色,也包含了用于执行字节码的解释器。同样地,Python的CPython实现也是先将源代码编译成字节码,然后由Python虚拟机执行。 1 从源代码中提取token的过程就是词法分析 词法分…

qml FileDialog 详解

1、概述 FileDialog是QML(Qt Modeling Language)中的一个组件,它提供了一个标准的文件选择对话框,允许用户浏览文件系统、选择文件或文件夹,并对其进行打开、保存等操作。FileDialog是Qt Quick Controls模块的一部分&…

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…