当前位置:首页 > 科技  > 软件

SpringCloud敏感信息配置揭秘,教你防止信息泄露!

来源: 责编: 时间:2023-11-02 17:14:11 226观看
导读环境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK171. 简介在Spring Boot中,配置文件通常包含了应用程序的敏感信息,例如数据库密码、API密钥、加密密钥等。如果这些敏感信息未经过加密处理,一旦配置文件被泄露或被不

环境:SpringBoot2.7.12 + SpringCloud2021.0.7 + JDK17QKE28资讯网——每日最新资讯28at.com

1. 简介

在Spring Boot中,配置文件通常包含了应用程序的敏感信息,例如数据库密码、API密钥、加密密钥等。如果这些敏感信息未经过加密处理,一旦配置文件被泄露或被不当访问,可能会导致安全风险和潜在的恶意行为。因此,对Spring Boot配置文件中的敏感信息进行加密处理是非常必要的。QKE28资讯网——每日最新资讯28at.com

敏感信息加密的目的是保护数据的安全性和完整性,防止未经授权的访问和泄露。通过加密敏感信息,可以确保只有经过授权的用户或系统可以解密和访问这些信息。即使配置文件被泄露,攻击者也无法轻易地获取敏感信息的真实内容,从而降低了安全风险。QKE28资讯网——每日最新资讯28at.com

目前在项目中用的比较多的应该是Jasypt,Jasypt是一个Java加密工具包,它简化了对密码的哈希加密、对文本和二进制数据的对称加解密等任务。在Spring Boot中,Jasypt可以用来对配置文件中的密钥进行加密存储,它支持基于标准的高安全性加密技术,适用于单向和双向加密。QKE28资讯网——每日最新资讯28at.com

本篇我们不会去介绍Jasypt如何使用。如果你的项目中已经使用到了SpringCloud那么SpringCloud已经为我们提供了配置文件内容加解密的处理方法;即时你的项目中没有用到,我们也只需要引入核心包即可使用它的这块功能。接下来将以实例一步一步的交你如何使用。QKE28资讯网——每日最新资讯28at.com

2. 加解密配置

  • 引入依赖
<properties>  <java.version>17</java.version>  <spring-cloud.version>2021.0.7</spring-cloud.version></properties><dependencies>  <dependency>    <groupId>org.springframework.cloud</groupId>    <artifactId>spring-cloud-context</artifactId>    <version>${spring-cloud.version}</version>  </dependency></dependencies>
  • 配置密钥信息
spring:  cloud:    bootstrap:      enabled: false # 这里必须是false,默认是false。---#加密配置encrypt:  #密钥  key: aaaabbbbccccdddd  #加密处理时的加盐信息  salt: dead
  • 加密敏感信息
// 通过如下方式将我们需要加密的内容进行加密,如:123123!@ 。进行加密处理TextEncryptor textEncryptor = new EncryptorFactory("dead").create("aaaabbbbccccdddd") ;System.out.println(textEncryptor.encrypt("123123!@")) ;
  • 配置文件中配置加密内容
db:  password: '{cipher}6c05a3e62aa1f71b814fd283fc15197ec18a83b67d9da27dcb63c1b3925d68c1'

注意:这里的前缀必须是:{cipher}QKE28资讯网——每日最新资讯28at.com

通过以上的配置,我们的配置也是完全可以正常工作的,测试如下:QKE28资讯网——每日最新资讯28at.com

public class SpringCloudComprehensiveApplication implements ApplicationRunner{  @Value("${db.password}")  private String pwd ;  public static void main(String[] args) {    SpringApplication.run(SpringCloudComprehensiveApplication.class, args);  }  @Override  public void run(ApplicationArguments args) throws Exception {    System.out.println(pwd) ;  }}

输出结果:QKE28资讯网——每日最新资讯28at.com

123123!@

正确的输出了结果。QKE28资讯网——每日最新资讯28at.com

到此配置文件敏感信息加密就完成了。但是发现我们非常重要的密钥信息还是存在配置文件中,这样还是和没加密一样啊,还是暴露了。我们可以通过命令行的方式来设置密钥信息。QKE28资讯网——每日最新资讯28at.com

  1. 从配置文件中删除配置的encrypt.key和encrypt.salt两个配置。
  2. 启动项目时指定命令行参数,如下:
java -jar xxx.jar --encrypt.key=aaaabbbbccccdddd --encrypt.salt=dead

通过这样设置,我们的程序也将正常的运行。其实命令行参数在程序运行过程中会自动的将这些信息添加到Environment中。QKE28资讯网——每日最新资讯28at.com

3. 实现原理QKE28资讯网——每日最新资讯28at.com

spring cloud context中提供了下面一个配置类,该配置类配置了一个ApplicationInitializer应用程序初始化类,也就是ApplicationContext容器初始化前执行的(Environment准备完之后)。QKE28资讯网——每日最新资讯28at.com

注意:这里是当我们项目中使用了配置中心,如使用了nacos的配置中心时
QKE28资讯网——每日最新资讯28at.com

public class EncryptionBootstrapConfiguration {  @Bean  public EnvironmentDecryptApplicationInitializer environmentDecryptApplicationListener(      ConfigurableApplicationContext context, KeyProperties keyProperties) {    TextEncryptor encryptor;    try {      // 我们完全可以自定义一个TextEncryptor类型的Bean,自己来实现加解密逻辑      encryptor = context.getBean(TextEncryptor.class);    }    EnvironmentDecryptApplicationInitializer listener = new EnvironmentDecryptApplicationInitializer(encryptor);    return listener;  }}

EnvironmentDecryptApplicationInitializer 类会解密我们的配置信息QKE28资讯网——每日最新资讯28at.com

public class EnvironmentDecryptApplicationInitializer {  private TextEncryptor encryptor;  public EnvironmentDecryptApplicationInitializer(TextEncryptor encryptor) {    this.encryptor = encryptor;  }  public void initialize(ConfigurableApplicationContext applicationContext) {     MutablePropertySources propertySources = environment.getPropertySources();    // ...    // 解密配置文件    Map<String, Object> map = decrypt(this.encryptor, propertySources);  }}

当我们项目中没有启用配置中心时,使用的是另外一个EnvironmentPostProcessor。QKE28资讯网——每日最新资讯28at.com

public class DecryptEnvironmentPostProcessor extends AbstractEnvironmentDecrypt    implements EnvironmentPostProcessor, Ordered {  public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {    // 如果启用了,则该处理器不会生效。    if (bootstrapEnabled(environment) || useLegacyProcessing(environment) || !isEnabled(environment)) {      return;    }    MutablePropertySources propertySources = environment.getPropertySources();    // 解密配置文件    Map<String, Object> map = TextEncryptorUtils.decrypt(this, environment, propertySources);  }}

了解了上面的源码实现,其实我们自己也可以借鉴它的实现方式来实现自己的配置文件处理。QKE28资讯网——每日最新资讯28at.com

注:配置文件的加解密也是支持RSA这种非对称算法的,有兴趣可以了解下,也是非常的简单。
QKE28资讯网——每日最新资讯28at.com

完毕!!!QKE28资讯网——每日最新资讯28at.com

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-16644-0.htmlSpringCloud敏感信息配置揭秘,教你防止信息泄露!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用Docker Compose编排多个容器

下一篇: 哥,我还是不懂 ThreadLocal

标签:
  • 热门焦点
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 一文看懂为苹果Vision Pro开发应用程序

    一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • 三言两语说透设计模式的艺术-单例模式

    三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    签约井川里予、何丹彤,单视频点赞近千万,MCN黑马永恒文希快速崛起!

    来源:视听观察永恒文希传媒作为一家MCN公司,说起它的名字来,可能大家会觉得有点儿陌生,但是说出来下面一串的名字之后,或许大家就会感到震惊,原来这么多网红,都签约这家公司了。根
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 2纳米决战2025

    2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    AMD的AI芯片转单给三星可能性不大 与台积电已合作至2nm制程

    据 DIGITIMES 消息,英伟达 AI GPU 出货逐季飙升,接下来 AMD MI 300 系列将在第 4 季底量产。而半导体业内人士表示,近日传出 AMD 的 AI 芯片将转单给
  • iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    iQOO Neo8 Pro抢先上架:首发天玑9200+ 安卓性能之王

    经过了一段时间的密集爆料,昨日iQOO官方如期对外宣布:将于5月23日推出全新的iQOO Neo8系列新品,官方称这是一款拥有旗舰级性能调校的作品。随着发布时
  • 上海举办人工智能大会活动,建设人工智能新高地

    上海举办人工智能大会活动,建设人工智能新高地

    人工智能大会在上海浦江两岸隆重拉开帷幕,人工智能新技术、新产品、新应用、新理念集中亮相。8月30日晚,作为大会的特色活动之一的上海人工智能发展盛典人工
Top
Baidu
map