热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud入门——7.3Config远程配置中心数据加密

代码信息本篇文章涉及代码版本组件版本SpringBoot2.0.8.RELEASESpringCloudFinchley.SR1本篇文章涉及应用应用说明base-eureka服务发

代码信息


本篇文章涉及代码版本



组件版本
Spring Boot2.0.8.RELEASE
Spring CloudFinchley.SR1

本篇文章涉及应用



应用说明
base-eureka服务发现
base-config-service-encryption配置中心服务端-加密
base-config-client-encryption配置中心客户端使用-加密



数据明文

使用明文保存一些敏感的数据,很显然不是一个很好的方法,尤其是使用配置中心后,大量的配置被集中在一起,这个时候对配置信息进行加密则变得至关重要。


实现数据加密


首先我们需要生成一个Keystore


这部分内容并非springcloud config加密的关键,但是不算太麻烦就顺带说下。


这一段很多都和网络上内容类似,假如有说的不明白的,可以去网络上去再搜索下生成Keystore的方法。


  1. 首先,需要下载无线长度限制的jce。JDK 8对应的JCE地址为:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
  2. 然后将下载的内容解压至JDK所在的/jre/lib/security文件下。
  3. 后续,在JDK所在的bin文件夹下执行命令:

keytool -genkeypair -alias config-key -keyalg RSA –keystore D:\config-key.jks -validity 1830 -keysize 1024 -storepass 123456 -keypass key123456 -dname "CN=daify,OU=dailearn,O=dailearn,L=武汉市,ST=湖北省,C=CN"

简单的说下参数的意思


参数含义
-genkey表示要创建新的密钥
-alias别名,每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写。
-keystorekeystore文件的存储位置,文件扩展名为".keystore"。
-keyalg指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA))。
-validity指定有效期(天),默认90天。
-keysize指定密钥长度。
-storepass指定密钥库的访问密码(获取keystore信息所需的密码)
-keypass指定别名条目的密码(私钥的密码)
-dname指定证书拥有者信息 例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”。

此时会生成一个config-key.jks文件,稍后备用


实现服务端


添加依赖


和之前配置中心服务端相同不需要进行修改。


<dependencies><dependency><groupId>org.springframework.cloudgroupId><artifactId>spring-cloud-config-serverartifactId>dependency>dependencies>

需要注意的时候&#xff0c;后续我们把config-key.jks文件放入resources文件夹下&#xff0c;为了防止此文件被maven过滤掉需要添加此配置

<build><finalName>config-keyfinalName><resources><resource><directory>src/main/resourcesdirectory><filtering>falsefiltering>resource>resources>build>

修改配置

bootstrap.yml的配置

encrypt:key: config-keykey-store:location: config-key.jkspassword: 123456alias: config-keysecret: key123456

bootstrap文件配置了config-key.jks文件的相关内容&#xff0c;而实际中发现将此配置迁移至application中会发现启动报错的情况。

application.yml的配置

spring:application:name: base-config-service-encryptioncloud:config:server:git:uri: https://gitee.com/daifylearn/cloud-configsearch-paths: /config,/base-config-client,/base-config-client-encryptionencrypt:enabled: true
server:port: 8703eureka:client:service-url: defaultZone: http://localhost:8000/eureka/
logging:file: ${spring.application.name}.log

启动主类

&#64;SpringBootApplication
&#64;EnableEurekaClient
&#64;EnableConfigServer
public class ConfigServiceApplication {public static void main(String[] args) {SpringApplication.run(ConfigServiceApplication.class, args);}
}

测试

此时为了测试项目加密和解密是否完成我们可以访问此应用的/encrypt/status接口

在这里插入图片描述

此时返回OK表示服务端配置完成了。


客户端

和之前的客户端内容相比&#xff0c;并没有任何修改


客户端测试接口

&#64;RestController
&#64;RequestMapping("config")
public class ConfigController {&#64;Value("${config.name}")private String profile;&#64;Value("${config.encrypt}")private String encrypt;&#64;GetMapping("/name")public String getProfile() {return this.profile;}&#64;GetMapping("/encrypt")public String getEncrypt() {return this.encrypt;}
}

测试

配置中心服务端启动的时候我们可以看到如下内容

2019-07-14 02:19:14.999 INFO 25704 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/encrypt],methods&#61;[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.encrypt(java.lang.String,org.springframework.http.MediaType)
2019-07-14 02:19:15.000 INFO 25704 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/decrypt],methods&#61;[POST]}" onto public java.lang.String org.springframework.cloud.config.server.encryption.EncryptionController.decrypt(java.lang.String,org.springframework.http.MediaType)

现在服务端暴漏了几个加密和解密的接口


进行数据加密

现在我们想服务端的encrypt接口请求加密admin&#xff0c;可以看到有如下返回

在这里插入图片描述


进行数据取回

我们将返回的内容复制后更新到配置中。

此时需要注意的


  1. 提醒配置中心词数据为加密后的数据需要在前部添加{cipher}内容。
  2. 使用properties类型的文件参数不需要其他处理&#xff0c;但是使用yml的配置文件&#xff0c;加密的数据除了{cipher}还需要使用单引号包裹’&#39;

客户端获取数据

现在我们访问客户端的config/encrypt接口获取的数据正是加密前的数据

在这里插入图片描述




本篇文章并未贴出所有代码&#xff0c;涉及的源码下载地址&#xff1a;https://gitee.com/daifylearn/cloud-learn


ps.上述的所有项目都是可以成功运行的。但是在后期为了实现每个应用端口尽量不冲突会有些许调整&#xff0c;而后续某次作死调整结构和名称可能会导致部分项目无法运行o(╯□╰)o&#xff0c;如果发现请留言我进行修改。


推荐阅读
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Win10下游戏不能全屏的解决方法及兼容游戏列表
    本文介绍了Win10下游戏不能全屏的解决方法,包括修改注册表默认值和查看兼容游戏列表。同时提供了部分已经支持Win10的热门游戏列表,帮助玩家解决游戏不能全屏的问题。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了在Spring 3.1中,数据源未能自动连接到@Configuration类的错误原因,并提供了解决方法。作者发现了错误的原因,并在代码中手动定义了PersistenceAnnotationBeanPostProcessor。作者删除了该定义后,问题得到解决。此外,作者还指出了默认的PersistenceAnnotationBeanPostProcessor的注册方式,并提供了自定义该bean定义的方法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
author-avatar
拍友2602937077
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有