SpringCloud-分布式配置中心【加密-对称加密】

痛定思痛。 2021-12-24 07:17 339阅读 0赞

  前面我们介绍了SpringCloud的分布式配置中心,我们将项目中的配置信息保存在git或者码云的仓库中,但是这样一些敏感信息就暴露出来了,比如数据库连接的账号密码等信息,这时我们最好能够对这些信息进行加密处理。

案例代码:https://github.com/q279583842q/springcloud-e-book

对称加密

一、对称加密介绍

  对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。

二、加密环境准备

  对称加密需要jdk的jce的支持,所以我们需要处理下,去这个地址下载对应的文件:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

在这里插入图片描述

  下载解压后,把 jar 文件上传到需要安装 jce 机器上 JDK 或 JRE 的 security 目录下,覆盖源文件即可。
JDK:将两个 jar 文件放到%JDK_HOME%\jre\lib\security 下
JRE:将两个 jar 文件放到%JRE_HOME%\lib\security 下

在这里插入图片描述

三、创建服务端项目

1.创建项目

  创建一个SpringCloud项目

在这里插入图片描述

2.pom文件

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-parent</artifactId>
  6. <version>1.5.13.RELEASE</version>
  7. </parent>
  8. <groupId>com.bobo</groupId>
  9. <artifactId>config-server-encryption-sym</artifactId>
  10. <version>0.0.1-SNAPSHOT</version>
  11. <dependencyManagement>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.cloud</groupId>
  15. <artifactId>spring-cloud-dependencies</artifactId>
  16. <version>Dalston.SR5</version>
  17. <type>pom</type>
  18. <scope>import</scope>
  19. </dependency>
  20. </dependencies>
  21. </dependencyManagement>
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-eureka</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.springframework.cloud</groupId>
  33. <artifactId>spring-cloud-config-server</artifactId>
  34. </dependency>
  35. </dependencies>
  36. <build>
  37. <plugins>
  38. <plugin>
  39. <groupId>org.springframework.boot</groupId>
  40. <artifactId>spring-boot-maven-plugin</artifactId>
  41. </plugin>
  42. </plugins>
  43. </build>
  44. </project>

3.配置文件

  配置密钥

  1. spring.application.name=config-server-encryption-sym
  2. server.port=9060
  3. #设置服务注册中心地址,指向另一个注册中心
  4. eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
  5. # Git 配置
  6. spring.cloud.config.server.git.uri=https://gitee.com/dengpbs/config
  7. #spring.cloud.config.server.git.username=
  8. #spring.cloud.config.server.git.password=
  9. # 配置密钥
  10. encrypt.key=dpb

启动程序访问:http://localhost:9060/encrypt/status 检查加密是否可用
提示:

  1. { "description":"No key was installed for encryption
  2. service","status":"NO_KEY"}

4.修改SpringCloud版本

  报错的原因是SpringCloud的版本太高,对应加密支持的版本是Dalston.SR1,所以我们需要修改下

在这里插入图片描述

测试:http://localhost:9060/encrypt/status

在这里插入图片描述

5.加密解密


















操作 地址
加密(post 请求) http://127.0.0.1:9060/encrypt
解密(post 请求) http://127.0.0.1:9060/decrypt

通过RestTemplate来测试加密解密操作

加密

  1. /** * 通过RestTemplate来加密数据 * @param args */
  2. public static void main(String[] args) {
  3. String url = "http://127.0.0.1:9060/encrypt";
  4. RestTemplate template = new RestTemplate();
  5. ResponseEntity<String> msg = template.postForEntity(url, "123456", String.class);
  6. System.out.println(msg.getBody());
  7. }

在这里插入图片描述

解密

  1. /** * 通过RestTemplate来解密 * @param args */
  2. public static void main(String[] args) {
  3. String url = "http://127.0.0.1:9060/decrypt";
  4. RestTemplate template = new RestTemplate();
  5. ResponseEntity<String> msg = template.postForEntity(url
  6. , "d901fa3734c5828be5b48ecfd152c170cab17d1729edab56497d1f1db0f8fb9b"
  7. , String.class);
  8. System.out.println(msg.getBody());
  9. }

在这里插入图片描述

四、创建客户端程序

1.创建客户端程序

  拷贝一个原来e-book中的项目,能够访问数据库:e-book-product-provider项目

在这里插入图片描述

2.pom文件

  需要添加config的依赖。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>org.springframework.boot</groupId>
  5. <artifactId>spring-boot-starter-parent</artifactId>
  6. <version>1.5.13.RELEASE</version>
  7. <relativePath /> <!-- lookup parent from repository -->
  8. </parent>
  9. <groupId>com.bobo</groupId>
  10. <artifactId>config-e-book-product-provider</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-web</artifactId>
  16. </dependency>
  17. <dependency>
  18. <groupId>org.mybatis.spring.boot</groupId>
  19. <artifactId>mybatis-spring-boot-starter</artifactId>
  20. <version>1.3.4</version>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-test</artifactId>
  25. <scope>test</scope>
  26. </dependency>
  27. <dependency>
  28. <groupId>org.springframework.cloud</groupId>
  29. <artifactId>spring-cloud-starter-eureka</artifactId>
  30. </dependency>
  31. <dependency>
  32. <groupId>mysql</groupId>
  33. <artifactId>mysql-connector-java</artifactId>
  34. <version>5.1.47</version>
  35. </dependency>
  36. <dependency>
  37. <groupId>com.bobo</groupId>
  38. <artifactId>e-book-product-service</artifactId>
  39. <version>0.0.1-SNAPSHOT</version>
  40. </dependency>
  41. <dependency>
  42. <groupId>org.springframework.cloud</groupId>
  43. <artifactId>spring-cloud-starter-config</artifactId>
  44. </dependency>
  45. </dependencies>
  46. <dependencyManagement>
  47. <dependencies>
  48. <dependency>
  49. <groupId>org.springframework.cloud</groupId>
  50. <artifactId>spring-cloud-dependencies</artifactId>
  51. <version>Dalston.SR5</version>
  52. <type>pom</type>
  53. <scope>import</scope>
  54. </dependency>
  55. </dependencies>
  56. </dependencyManagement>
  57. <build>
  58. <plugins>
  59. <plugin>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-maven-plugin</artifactId>
  62. </plugin>
  63. </plugins>
  64. </build>
  65. </project>

3.配置文件

  添加bootstrap.properties

  1. spring.application.name=config-e-book-product-provider
  2. server.port=9001
  3. # 注册中心的配置信息
  4. eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
  5. #配置中心服务端的链接信息
  6. #默认 false,这里设置 true,表示开启读取配置中心的配置
  7. spring.cloud.config.discovery.enabled=true
  8. #对应 eureka 中的配置中心 serviceId,默认是 configserver
  9. spring.cloud.config.discovery.serviceId=config-server-encryption-sym
  10. #git 标签
  11. spring.cloud.config.label=master

application.properties可以删除

在git仓库中我们需要添加对应的配置文件

在这里插入图片描述

名称必须为 config-e-book-product-provider 开头,和客户端程序名称一致。

在这里插入图片描述

将敏感信息加密保存到仓库的属性文件中,必须要注意密文前需要加{cipher}

4.测试

  启动服务器和客户端程序,访问:http://localhost:9001/product/findAll

在这里插入图片描述

客户端程序获取到了数据库中的数据,说明获取到仓库中的配置信息。

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读

    相关 加密算法-对称加密&非对称加密

    加密算法是一种将明文转换为密文的算法,以保护数据的机密性和安全性。加密算法通常分为两种类型:对称加密算法和非对称加密算法。 1. 对称加密算法:指加密和解密使用相同密钥的算

    相关 对称加密和非对称加密

    非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下: 1、加密和解密过程不同 对称加密过程和解密过程使用的同一个密钥,加密过程相当于