SpringCloud系列十:SpringCloudConfig 高级配置(密钥加密处理(JCE)、KeyStore 加密处理、SpringCloudConfig 高可用机制)

1、概念:SpringCloudConfig 高级配置

2、具体内容

在 SpringCloudConfig 之中考虑到所有配置文件都暴露在远程仓库之中的安全性问题,所以提供有安全访问的处理机制,这样可以对一些数据进行加密以及在读取的时候实现解密的控制。

2.1、密钥加密处理

所谓的密钥的处理指的就是设置一个公共的操作访问密码,而后通过 curl 命令对要进行访问的数据做一个加密处理即可。

1、 【microcloud-config-7101】修改 application.yml 配置文件,进行密钥的设置:

encrypt:
  key: studyjava.cn    # 设置了一个加密的访问密钥

随后立即启动“microcloud-config-7101”微服务进程。

2、 更换要使用的 JCE(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)

· 将下载后的文件做解压缩处理,而后保存到使用的 JDK 目录:“D:\Java\jdk1.8.0_144\jre\lib\security”;

3、 【本地系统】利用 curl 命令进行微服务访问,对指定的数据做一个加密的操作处理:

· 注意:一定要保证你现在的微服务使用的 JDK 是已经更新过 JCE 的 JDK。

curl -X POST http://studyava:[email protected]:7101/encrypt -d mysqladmin

密码加密处理后: a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca

现在可以发现加密后的内容是比较长的。如果要解密的话也可以使用:

curl -X POST http://studyava:[email protected]:7101/decrypt -d a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca

4、 【GITHUB】修改“D:\springcloudconfig\microconfig\microcloud-config-dept-client\ microcloud-config-dept-client.yml”文件,将加密后的内容保存到此处,但是需要注意一个问题,如果要想进行正确的解密要保持下面的格式:

spring:
  profiles: dev
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource    # 配置当前要使用的数据源的操作类型
    driver-class-name: org.gjt.mm.mysql.Driver      # 配置MySQL的驱动程序类
    url: jdbc:mysql://localhost:3306/study8001           # 数据库连接地址
    username: root                                  # 数据库用户名
    password: ‘{cipher}a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca‘

5、 【GITHUB】将修改后的microcloud-config-dept-client.yml提交到 GITHUB 之中:

现在只是保存到 GITHUB 上的内容进行了加密处理,但是由于有 SpringCloudConfig 配置中心的存在(配置好了密钥),所以用户按照传统的模式正常访问即可。

访问路径:http://studyava:[email protected]:7101/microcloud-config-dept-client-dev.yml;

最为关键的是现在可以发现进行解密处理的时候,如果没有加密的数据是不会进行解密处理的。

2.2、KeyStore 加密处理

在进行加密处理的时候还有一种加密的方式会更加的方便,就是直接利用 JKS 操作的模式来完成,通过这种的加密更加的安全,因为只需要有一个 jks 配置文件即可实现加密与解密。

1、 【本地系统】需要生成一个进行加密处理的 key 信息(主要是得到了“*.jks”文件)

keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass
changeit -keystore server.jks -storepass studyjava

2、 【microcloud-config-7101】此时会出现有一个“server.jks”配置文件,将配置文件拷贝到项目中的“src/main/resources”目录之中,如下图所示:

3、 【microcloud-config-7101】修改 application.yml 配置文件,在这个配置文件之中追加有 keystore 相关配置项:

encrypt:
  keyStore:
    location: classpath:/server.jks   # server.jks的配置文件的路径
    password: studyjava      # 设置store的密码
    alias: mytestkey
    secret: changeit      # keypass密码

4、 【microcloud-config-7101】以上的配置文件之中已经设置了 server.jks 的路径,但是这个路径你现在如果在 maven 里面是找不到的,所以应该修改项目中的 pom.xml 文件,追加资源的输出配置项:

    <build>
        <finalName>microcloud-config</finalName>
        <resources>
            <resource>     <!-- 防止JKS被Maven过掉 -->
                <directory>src/main/resources</directory>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

5、 【浏览器测试】进行数据的加密与解密处理:

数据加密:curl -X POST http://studyjava:[email protected]:7101/encrypt -d mysqladmin

加密结果: AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L...此处省略几千个字符

数据解密: curl -X POST http://studyjava:[email protected]:7101/decrypt -d AQABpN8ZrZbbY ...此处省略几千个字符

6、 【GITHUB】修改 microcloud-config-dept-client.yml 配置文件,将加密后的内容配置上:

spring:
  profiles: dev
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource    # 配置当前要使用的数据源的操作类型
    driver-class-name: org.gjt.mm.mysql.Driver      # 配置MySQL的驱动程序类
    url: jdbc:mysql://localhost:3306/study8001           # 数据库连接地址
    username: root                                  # 数据库用户名
    password: ‘{cipher}AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L6cksGdcTGlBoaYBsvMvLanShWukEv985CmtMETDlqpviKZ7YXEO3PGIW9sLgQXf2MB2yEFzTKoUzQk1EPUBnYLndw8jrkeI41Yiwzq6pJ28yJfE4lWV8mcirb7XhdwR4xYwy/BwgAna8c+4gHo9pLhtDU4Mvu0ccR3EqPv6hc9sK8ElR7SaQ48HGjOsZJZT0v4g1HWrWMf58xShgOd1qBL2iXsHkCbGjUpzbtCQBkDEavaMHxiA3sLLqtCX7CuFOv1enE09w1L0Vdj3wHjCMNygr1PmMNpuGrl3VbMDKSYSu5KD3kKN/NcwvAL+Jwt01j/fdHp7Q6Jpi2o5PWMccYV+mPLCnP8=‘
  

随后将配置文件提交到 GITHUB 之中,再通过 SpringCloudConfig 访问后就可以得到原始的数据了。

2.3、SpringCloudConfig 高可用机制

现在已经实现了整个的 SpringCloudConfig 的配置项处理,但是在这之中会存在有一个小小的问题,就是说所有的服务现在都 需要通过 SpringCloudConfig 加载配置文件,那么一旦 SpringCloudConfig 出错了,所有的服务就挂掉了

1、 【microcloud-config-eureka-7301】建立一新的模块,通过已有的 eureka 服务的配置模块拷贝过来,为了方便本次的 eureka 就 只设计一个节点,随后为了以后方便访问,可以修改 hosts 配置文件,追加新的主机名称:

127.0.0.1 eureka-config.com

2、 【microcloud-config-eureka-7301】修改项目中的 application.yml 配置文件:

spring:
  profiles:
    active:
    - dev-7301
---
spring:
  profiles: dev-7301
  application:
    name: microcloud-eureka-7301
server:
  port: 7301
security:
  basic:
    enabled: true   # 启用安全认证处理
  user:
    name: edmin     # 用户名
    password: studyjava  # 密码
eureka:
  client: # 客户端进行Eureka注册的配置
    service-url:
      defaultZone: http://edmin:[email protected]:7002/eureka
    register-with-eureka: false    # 当前的微服务不注册到eureka之中
    fetch-registry: false     # 不通过eureka获取注册信息
  instance: # eureak实例定义
    hostname: eureka-7301.com # 定义Eureka实例所在的主机名称

配置完成之后进行服务的启动,访问地址:http://edmin:[email protected]:7301

3、 【microcloud-config-*】修改 pom.xml 配置文件,追加 eureka 客户端依赖包:

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

4、 【microcloud-config-*】修改 application.yml 配置文件,主要是进行 eureka 客户端的配置处理:

eureka:
  client:
    service-url:
      defaultZone: http://edmin:[email protected]:7301/eureka
  instance:
    prefer-ip-address: true     # 在地址栏上使用IP地址进行显示
    instance-id: config-7101.com

随后的其它的配置文件只需要考虑到“instance-id”的不同即可;

5、 【microcloud-config-*】修改程序启动类,追加 Eureka 客户端注解:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class Config_7101_StartSpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(Config_7101_StartSpringCloudApplication.class, args);
    }
}

6、 【本地主机】修改 hosts 配置文件,追加多个配置主机名称:

127.0.0.1 config-7101.com
127.0.0.1 config-7102.com
127.0.0.1 config-7103.com

7、 【本地测试】分别启动所有的 SpringCloudConfig 微服务进程,随后进行访问测试:

8、 【GITHUB】修改 microcloud-config-client.yml 配置文件,在这个配置文件里面需要考虑好 eureka 的问题;

spring:
  profiles:
    active:
    - dev
---
server:
  port: 8201
spring:
  profiles: dev
  application:
    name: microcloud-config-client
eureka:
  client:
    service-url:
      defaultZone: http://edmin:[email protected]:7301/eureka
---
server:
  port: 8102
spring:
  profiles: beta
  application:
    name: microcloud-config-client
eureka:
  client:
    service-url:
      defaultZone: http://edmin:[email protected]:7301/eureka

9、 【microcloud-config-client-8201】修改 bootstrap.yml 配置文件,此时的配置文件需要通过 eureka 获取 config 服务信息;

spring:
  cloud:
    config:
      name: microcloud-config-client    # 定义要读取的资源文件的名称
      profile: beta      # 定义profile的 名称
      label: master     # 定义配置文件所在的分支
      # uri: http://config-7101.com:7101  # SpringCloudConfig的服务地址
      username: studyjava  # 连接的用户名
      password: hello   # 连接的密码
      discovery:
        enabled: true   # 通过配置中心加载配置文件
        service-id: MICROCLOUD-CONFIG   # 在eureka之中注册的服务ID

eureka: # 一定要编写一个eureka的地址
  client: # 目的是为了让客户端可以通过eureka找到SpringCloudConfig微服务
    service-url:
      defaultZone: http://edmin:[email protected]:7301/eureka

10、 【microcloud-config-client-8201】在启动类上追加 Eureka 客户端的配置注解:

package cn.study.microcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class Client_8201_StartSpringCloudApplication {
    public static void main(String[] args) {
        SpringApplication.run(Client_8201_StartSpringCloudApplication.class, args);
    }
}

那么现在就实现了 SpringCloudConfig 基于 Eureka 的高可用处理机制。

原文地址:https://www.cnblogs.com/leeSmall/p/8878091.html

时间: 2024-08-04 23:47:28

SpringCloud系列十:SpringCloudConfig 高级配置(密钥加密处理(JCE)、KeyStore 加密处理、SpringCloudConfig 高可用机制)的相关文章

SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操作流程,在整个 Rest 架构里面,会存在有大量的微服务的信息. 在 SpringCloud 之中使用了大量的 Netflix 的开源项目,而其中 Eureka 就属于 Netflix 提供的发现服务组件,所有的微服务在使用之中全部向 Eureka 之中进行注册,而后客户端直接利用 Eureka 进

使用ansible快速配置RHCS 集群 实现WEB站负载均衡高可用(手记)

什么是RHCS RHCS是Red Hat Cluster Suite的缩写,也就是红帽子集群套件,RHCS是一个能够提供高可用性.高可靠性.负载均衡.存储共享且经济廉价的集群工具集合,它将集群系统中三大集群架构融合一体,可以给web应用.数据库应用等提供安全.稳定的运行环境. 更确切的说,RHCS是一个功能完备的集群应用解决方案,它从应用的前端访问到后端的数据存储都提供了一个行之有效的集群架构实现,通过RHCS提供的这种解决方案,不但能保证前端应用持久.稳定的提供服务,同时也保证了后端数据存储的

Nginx配置upstream实现负载均衡及keepalived实现nginx高可用

(原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟机发布了两个项目分别为:http://192.168.28.128:8081, http://192.168.28.129:8081 2.在两个虚拟机上都安装好nginx 二.配置upstream 1.在任意一台虚拟机上所安装的nginx的nginx.conf配置文件中配置upstream如下: 以

spring cloud深入学习(十二)-----Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

Zuul的核心 Filter是Zuul的核心,用来实现对外服务的控制.Filter的生命周期有4个,分别是“PRE”.“ROUTING”.“POST”.“ERROR”,整个生命周期可以用下图来表示. Zuul大部分功能都是通过过滤器来实现的,这些过滤器类型对应于请求的典型生命周期. PRE: 这种过滤器在请求被路由之前调用.我们可利用这种过滤器实现身份验证.在集群中选择请求的微服务.记录调试信息等. ROUTING:这种过滤器将请求路由到微服务.这种过滤器用于构建发送给微服务的请求,并使用Apa

SpringCloud系列十:使用Feign实现声明式REST调用

1. 回顾 前文的示例中是使用RestTemplate实现REST API调用的,代码大致如下: @GetMapping("/user/{id}") public User findById(@PathVariable Long id) { return this.restTemplate.getForObject("http://microservice-provider-user/" + id, User.class); } 由代码克制,我们是使用拼接字符串的方

配置mysql的双向主从并通过keepalived实现高可用

说明: 此文章是借鉴好朋友的文档 http://sunys.blog.51cto.com/8368410/1639820 环境: mysql的版本:mysql-5.6.22 系统:centos6.4 master:192.168.186.129 slave:192.168.186.128 vip: 192.168.186.140          #虚拟ip,web服务器连接的ip 步骤:    配置mysql的单向主从: 注意:mysql的安装步骤省略 master:         #开启二

springCloud(16):使用Zuul构建微服务网关-容错回退与高可用

一.容错与回退 1.1.容错 在Spring Cloud中,Zuul默认已经整合了Hystrix. 测试: a.依次启动eureka-server(4010).provide-user(4011).hystrix-consumer-movie(5012).microservice-gateway-zuul(5016).hystrix-dashboard(5013) b.访问http://localhost:5016/hystrix-consumer-movie/user/1,可正常获取结果 c.

springCloud系列教程01:Eureka 注册中心集群搭建

springCloud系列教程包含如下内容: springCloud系列教程02:ConfigServer 配置中心server搭建 springCloud系列教程03:ConfigClient 配置中心client搭建 springCloud系列教程04:配置信息动态刷新 /bus/refresh springCloud系列教程05:@FeignClient微服务间接口调用及权限验证 springCloud系列教程06:zuul统一网关配置及权限验证 springCloud系列教程07:综合演

SpringCloudConfig与SpringCloudEureka 注册中心与配置中心高可用的意义

所有的配置会缓存在本地,远程配置中心DOWN机,不影响本地使用,只是无法重新请求服务端获取配置的更新. 不管是注册中心的高可用,还是配置中心的高可用.本质上都是保证服务能注册上去或者能从配置中心获取配置. 注册中心的高可用,意味着如果有一台注册中心DOWN机,其他的注册中心同样能提供注册和查询服务,即使所有注册中心服务器全面down机,其实也不影响提供者和消费者的使用,因为当服务消费者第一次去请求注册中心之后,会把提供者的地址缓存在本地,同样可以直接调用提供者提供的服务(服务提供者可以部署多台机