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

╰+哭是因爲堅強的太久メ 2021-12-24 09:11 343阅读 0赞

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

非对称加密

一、什么是非对称加密(Asymmetric encryption)

在这里插入图片描述

在这里插入图片描述

二、Java-keytool 使用说明

  非对称加密我们需要生成对应的公钥和私钥,jdk中提供的有java-keytool工具帮助我们生成,执行如下命令:

  1. keytool -genkeypair -alias "config-info" -keyalg "RSA" -keystore c:\tools\encryp-info.keystore

在这里插入图片描述

在这里插入图片描述

三、创建服务项目

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-SRA</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.SR1</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-SRA
  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. #keytool -genkeypair -alias "config-info" -keyalg "RSA" -keystore c:\tools\encryp-info.keystore
  10. # keystore 文件的路径
  11. encrypt.key-store.location=classpath:encryp-info.keystore
  12. # alias 指定密钥对的别名,该别名是公开的;
  13. encrypt.key-store.alias=config-info
  14. # storepass 密钥仓库
  15. encrypt.key-store.password=123456
  16. # keypass 用来保护所生成密钥对中的私钥
  17. encrypt.key-store.secret=123456

将生成的keystore文件拷贝到classpath目录下

在这里插入图片描述

4.启动测试

测试加密状态:http://localhost:9060/encrypt/status
在这里插入图片描述

加密

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

四、创建客户端项目

1.创建项目

  拷贝上个案例的客户端程序。

在这里插入图片描述

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. <relativePath /> <!-- lookup parent from repository -->
  8. </parent>
  9. <groupId>com.bobo</groupId>
  10. <artifactId>config-e-book-product-provider-sra</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文件

  1. spring.application.name=config-e-book-product-provider-sra
  2. server.port=9001
  3. #\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740\uFF0C\u6307\u5411\u53E6\u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3
  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-SRA
  10. #git 标签
  11. spring.cloud.config.label=master

4.仓库文件

  在git中创建config-e-book-product-provider-sra.properties文件
在这里插入图片描述

  1. #--------------db----------------
  2. mybatis.type-aliases-package=com.book.product.pojo
  3. mybatis.mapper-locations=classpath:com/bobo/product/mapper/*.xml
  4. spring.datasource.driverClassName=com.mysql.jdbc.Driver
  5. spring.datasource.url=jdbc:mysql://localhost:3306/book-product?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
  6. spring.datasource.username={cipher}AQBTQaUuvTsXQ9Y4tr9Vq5BrEASk7ItrtNsQemtjgMd8anL5bMeo+NJVJ2kEKOzEdITiEGAguUTs78I9XGBZNI2DaNcySNjmKIi6NRX9ury1Fd9tGzT4ViZyNf2IcaUhwb7Yx0HBiHAyOxVDB1wStCUTUj3sD7/MZxw3VQeUMueti4j7giyHg2xGnKW1NnKNxKjpiUKY1uz3Ag2DZwdLQnAvmm90Y290HNNMDzq8ROrHbxXmyGCAlpmHXWloLZ0r7eBNkLvG7Hnnx9vDmWWyiRxSPiJo2UszmnKf5vN8hQZYIU83AjXMkOGolpPkOhg4nsoQS9++oF/AYGGydthxmuI9zsX8L6JXWBioo72yAXX8sw7doAp71ABuv2ivwd8njo8=
  7. spring.datasource.password={cipher}AQBZKEptQk2RBf+3DJ1tlHbmFKiuNtjwIbq8qf1kjIkkteYmxcrTfPmO5DYFuRd/xsVlKAfK+pfsn1nPntBjqMQYPvDPMy7LkcYe/gA4Q8/9d97Fn8o0TRv3VcYLvnPbn77S3CWBG/80LngQjLSbpShrUJdf7saC1ksBFDTmLMjlClJudIv3SpzkEVWZ8gc/UJoJSCHT/p3IAIxIGG6zQwYxv04tHYzMV+mxy5bgg6G6K+tQ9RShd0KkedtJHKTWaF3fJWfQHgy4eK5+d4UCinUso0pQg+kQpEgcszgK4+2jOnmf5O0OYzlzUkdAhYvqHFvi6qzQSh63KRTvkxAXSWZK6H8ku11Il3zJzNkiaJTK4bIFDKjV4ZSUbluzNxA946M=

5.测试

  启动服务端和客户端访问。

在这里插入图片描述

  直接访问服务端查看:http://localhost:9060/config-e-book-product-provider-SRA/default

在这里插入图片描述

我们发现当我们知道服务端的访问地址后,其实可以拿到解密后的明文,这种是我们加密中的漏铜,这时我们可以通过添加安全认证来解决。

五、安全认证

服务端项目集成Security

添加security依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-security</artifactId>
  4. </dependency>

修改配置

  在application.properties中添加如下信息

  1. # 安全认证
  2. #开启基于 http basic 的安全认证
  3. security.basic.enabled=true
  4. security.user.name=dpb
  5. security.user.password=123456

测试

http://localhost:9060/config-e-book-product-provider-SRA/default

在这里插入图片描述
在这里插入图片描述

客户端认证

  因为服务端开启了完全认证,所以客户端也必然要响应的添加。所以在bootstrap.properties中添加对应的账号信息即可:

  1. spring.application.name=config-e-book-product-provider-sra
  2. server.port=9001
  3. #\u8BBE\u7F6E\u670D\u52A1\u6CE8\u518C\u4E2D\u5FC3\u5730\u5740\uFF0C\u6307\u5411\u53E6\u4E00\u4E2A\u6CE8\u518C\u4E2D\u5FC3
  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-SRA
  10. #git 标签
  11. spring.cloud.config.label=master
  12. #安全保护
  13. spring.cloud.config.username=dpb
  14. spring.cloud.config.password=123456

在这里插入图片描述

这样就堵住了加密后信息在服务端显示的漏洞咯

发表评论

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

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

相关阅读

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

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

    相关 对称加密对称加密

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