使用Spring Cloud Config和JCE加密配置文件的实战教程

news/2024/9/29 20:13:33 标签: springcloud, config

使用Spring Cloud Config和JCE加密配置文件的实战教程

1. 前言

在微服务架构中,集中化管理配置文件是常见的需求。Spring Cloud Config 提供了集中化的配置管理方案,而在某些场景下,配置文件中可能包含敏感信息(如数据库密码、API密钥等),为了保障安全性,我们可以借助 Java Cryptography Extension (JCE) 来对这些敏感数据进行加密存储,并在运行时解密。

此外,如果 Spring Cloud Config 使用的 Git 仓库是私有的,还需要提供相应的凭证来访问。本文将介绍如何在 Spring Boot 项目中使用 Spring Cloud Config 进行集中配置管理,并结合 JCE 来保障敏感数据的安全。

2. Spring Cloud Config 简介

Spring Cloud Config 是一个用于集中管理分布式系统中配置文件的工具。它由 Config Server 和 Config Client 组成:

  • Config Server:负责从远程存储中获取配置文件并将其提供给客户端。
  • Config Client:从 Config Server 获取配置并在应用程序中使用。

3. JCE 简介

Java Cryptography Extension (JCE) 是 Java 提供的一个框架,支持加密、密钥管理和证书操作。JCE 允许开发者使用强加密算法来处理敏感数据。结合 JCE 和 Spring Cloud Config,我们可以实现以下目标:

  • 加密:将敏感的配置数据加密存储在远程存储库中。
  • 解密:应用程序在启动时从远程存储库获取加密的配置数据,并使用 JCE 进行解密。

4. 环境准备

在开始之前,确保你已经配置了以下环境:

  • JDK 8 或更高版本
  • Maven 或 Gradle
  • 一个支持 Git 的远程存储库(如 GitHub)
  • Spring Boot 和 Spring Cloud 相关依赖

5. 创建 Spring Cloud Config Server

5.1 引入依赖

创建一个 Spring Boot 项目作为 Config Server,并在 pom.xml 中引入以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

5.2 配置 Config Server

application.yml 中配置 Config Server,指定配置文件的远程存储库:

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-repo/config-repo

5.3 启动 Config Server

SpringBootApplication 主类中添加 @EnableConfigServer 注解:

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

6. 配置私有Git仓库的访问凭证

如果你的 Git 仓库是私有的,Spring Cloud Config 需要提供登录凭证。你可以通过以下几种方式提供凭证:

6.1 使用用户名和密码访问私有仓库

如果你使用 HTTP 或 HTTPS 访问 Git 仓库,可以通过以下配置提供用户名和密码:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-private-repo/config-repo
          username: your-username
          password: your-password

注意:为了保证安全性,建议不要直接在配置文件中写入用户名和密码。你可以通过环境变量或加密的方式管理这些敏感信息。

例如,通过环境变量管理凭证:

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/your-private-repo/config-repo
          username: ${GIT_USERNAME}
          password: ${GIT_PASSWORD}

6.2 使用 SSH 密钥访问私有仓库

如果你使用 SSH 协议来访问私有 Git 仓库,可以配置 SSH 私钥:

spring:
  cloud:
    config:
      server:
        git:
          uri: git@github.com:your-private-repo/config-repo.git
          privateKey: /path/to/your/private/key
          passphrase: your-key-passphrase
  • privateKey 是指向你的 SSH 私钥的文件路径。
  • passphrase 如果你的私钥使用了密码保护,需要提供相应的密码。

同样地,建议通过环境变量来管理私钥和密码,避免将敏感信息直接写入配置文件。

7. 创建 Spring Cloud Config Client

7.1 引入依赖

创建一个 Spring Boot 项目作为客户端,在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

7.2 配置客户端

在客户端的 application.yml 中,配置 Config Server 的地址:

spring:
  cloud:
    config:
      uri: http://localhost:8888

7.3 使用加密和解密

为了安全地存储敏感数据,Spring Cloud Config 支持通过 JCE 实现加密解密。首先,你需要在配置文件中标记需要加密的字段。例如,将 application-dev.yml 中的数据库密码进行加密:

spring:
  datasource:
    password: "{cipher}AQABBBuWf..."

其中,{cipher} 前缀用于告诉 Spring Cloud Config 该值是加密的,需要在运行时解密。

8. 使用 JCE 加密和解密

8.1 配置加密/解密密钥

Spring Cloud Config 支持多种加密方式,例如对称加密和非对称加密。在这里我们以对称加密为例。首先,在 application.yml 中指定加密密钥:

encrypt:
  key: your-secret-key

注意:不要将密钥直接放在配置文件中,应使用安全的方式(如环境变量)来管理密钥。

8.2 加密敏感数据

可以使用 Spring Cloud Config 提供的加密工具来加密配置数据。首先,启动 Config Server 后,通过以下命令加密你的敏感信息:

curl http://localhost:8888/encrypt -d mypassword

该命令将返回一个加密后的字符串,例如:

AQABBBuWf...

然后,将加密后的密码放入配置文件中,并使用 {cipher} 前缀:

spring:
  datasource:
    password: "{cipher}AQABBBuWf..."

8.3 解密敏感数据

在客户端应用程序运行时,Spring Cloud Config 将自动使用 JCE 解密带有 {cipher} 前缀的配置项。你可以通过常规方式注入这些解密后的配置值:

@Value("${spring.datasource.password}")
private String dbPassword;

9. 动态刷新配置

为了在不重启应用的情况下动态刷新配置,Spring Cloud Config 支持动态刷新机制。你可以通过 Spring Boot Actuator 的 /refresh 端点实现。

9.1 启用 /refresh 端点

在客户端的 application.yml 中启用 /refresh 端点:

management:
  endpoints:
    web:
      exposure:
        include: refresh

然后可以通过以下命令手动刷新配置:

curl -X POST http://localhost:8080/actuator/refresh

10. 总结

通过将 Spring Cloud Config 与 JCE 结合,我们可以实现集中管理配置文件的同时保障敏感数据的安全。JCE 提供了灵活的加密和解密机制,使得敏感信息可以以加密形式存储在远程存储库中,并在应用启动时动态解密。同时,通过为私有 Git 仓库提供登录凭证,我们可以确保 Config Server 能够正常访问受保护的配置文件。

这种方案适合在分布式微服务架构中统一管理和保护配置文件中的敏感数据,从而增强应用程序的安全性。

11. 参考资料

  • Spring Cloud Config 官方文档
  • Java Cryptography Architecture (JCA) Reference Guide
  • Spring Boot 官方文档

http://www.niftyadmin.cn/n/5683658.html

相关文章

C++ 机器人相关面试点

C 机器人相关面试点 多功能聊天乐园 1. 功能实现&#xff1a; 用户管理&#xff1a;实现了用户注册与登录、头像上传与下载功能&#xff0c;用户密码通过OpenSSL加密&#xff0c;用户数据存储在MySQL数据库中&#xff0c;并通过XML文件进行本地持久化配置。 音乐播放与下载&a…

ACC5.【C语言】几个迫使CPU等待的语句

1.嵌入式开发插入汇编指令 插入hlt指令:让CPU停止工作进入待机状态,只要外部发生变化(按键盘点击鼠标),CPU立刻响应 插入wait指令,当8086的TEST引脚为高电平时,暂停后续指令的执行,否则继续执行 2.C语言 *需要调用库函数 #include <stdlib.h> int main() {system(&q…

无锡卓瓷X哲讯智能科技,SAP项目正式启动!

在数字化浪潮的推动下&#xff0c;高精密陶瓷行业的领军企业—无锡卓瓷科技有限公司&#xff0c;携手哲讯智能科技有限公司近期启动SAP&BI项目&#xff0c;以打造行业领先的数字化管理平台。这一战略举措标志着无锡卓瓷在数字化转型的道路上迈出了坚实的一步。 无锡卓瓷—…

Mac中访达显示/关闭隐藏文件

Mac中访达显示/关闭隐藏文件 您可以使用特殊的键盘快捷键查看 Mac 上的所有不可见项目。下面是具体步骤&#xff1a; 1、激活 Finder 应用程序&#xff0c; 打开可能包含此类文件的文件夹。 Command Shift 句点 【CMDShift.】3、如果您想再次隐藏文件&#xff0c;请再次重…

[遇到问题] Word中插入公式横线“-”变成了长连字符

1 一招解决Word里公式减号/短横线&#xff0c;在关闭word后变成连字符_word中公式短横线变成了减号-CSDN博客 2 选中横向-公式-文本&#xff08;公式文本化即可&#xff09;

BACnet协议-(基于ISO 8802-3 UDP)(2)

1、模拟设备的工具界面如下&#xff1a; 2、使用yet another bacnet explorer 用作服务&#xff0c;用于发现设备&#xff0c;界面如下&#xff1a; 3、通过wireshark 抓包如下&#xff1a; &#xff08;1&#xff09;、整体包如下&#xff1a; &#xff08;2&#xff09;、m…

CC-LINK IE Field Basic通讯设置

一、设备简介 硬件&#xff1a;R08EN、FR-E840-EPB&#xff1b; 软件&#xff1a;GX Works3、FR Configurator2&#xff1b; 二、硬件展示 三、PLC侧参数设置 1.登录配置文件&#xff08;配置文件前期博文已经分享了&#xff0c;自行下载&#xff09; 2.导航→参数→模块参数…

苏州 工业三维动画制作「世岩清上」一站式可视化营销服务商

在现代工业设计和营销中&#xff0c;三维动画已成为一种重要的视觉传达工具。它不仅能够直观展示产品的外观和功能&#xff0c;还能通过动态演示来增强观众的理解和体验。本文将深入探讨工业三维动画制作的关键点&#xff0c;包括产品动画和场景动作的制作技巧。 产品动画制作…