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

发布于:2025-02-10 ⋅ 阅读:(32) ⋅ 点赞:(0)

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

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

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

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

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

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

网站公告

今日签到

点亮在社区的每一天
去签到