一、对称加密
1.什么是对称加密?
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的 是同样的密钥(secret key)。
2.检查加密环境:
没有为加密服务安装秘钥访问:http://127.0.0.1:端口号/encrypt/status;
安装了秘钥
3.设置加密环境的步骤:
- 设置秘钥KEY:
在配置文件中添加:encrypt.key=key值;
- 配置爱JCE:
文件目录http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html根据自己的jdk版本下载;
下载解压后,把 jar 文件上传到需要安装 jce 机器上 JDK 或 JRE 的 security 目录下,覆盖源文件 即可。
JDK:将两个 jar 文件放到%JDK_HOME%\jre\lib\security 下;
JRE:将两个 jar 文件放到%JRE_HOME%\lib\security 下 ;
- Spring Cloud Bug:
Dalston.SR4、Dalston.SR3、Dalston.SR2 版本不能对配置文件加密,若需要调整到 Dalston.SR1 https://github.com/spring-cloud/spring-cloud config/issues/767 ;
- 加密演示:
加密(post 请求):http://127.0.0.1:9030/encrypt ;
解密(post 请求):http://127.0.0.1:9030/decrypt ;
4.测试服务加密:
-
创建项目(配置中心的服务端):
示例 -
修改POM文件:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
- 修改配置文件:
spring.application.name=config-server-encryption-sym
server.port=9030
#设置服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#Git 配置
spring.cloud.config.server.git.uri=https://gitee.com/zwzy/config
#Git私有仓库的用户名和密码
#spring.cloud.config.server.git.username=
#spring.cloud.config.server.git.password=
#配置密钥
encrypt.key=admin
- 修改启动类:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
测试:
示例 - 测试加密和解密:
加密使用HttpClientUtil工具类。
解密
-
创建读取配置中心配置内容的项目(配置中心的客户端):
使用的是e-book中的Product-Provider - 修改POM文件,添加坐标:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 修改配置文件:
spring.application.name=config-e-book-product-provider
server.port=9010
#设置服务注册中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默认 false,这里设置 true,表示开启读取配置中心的配置
spring.cloud.config.discovery.enabled=true
#对应 eureka 中的配置中心 serviceId,默认是configserver
spring.cloud.config.discovery.serviceId=config-server-encryption-sym
#git标签
spring.cloud.config.label=master
-
创建上传到git远程仓库的配置文件config-e-book-product-provider.properties:
示例
#----mysql-db-------
mybatis.type-aliases-package=com.book.product.pojo
mybatis.mapper-locations==classpath:com/book/product/mapper/*.xml
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book-product?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username={cipher}e5a81822623a6cf93fb7b9640238ec73c14c897fd2bc4e759a68956e1effe052
spring.datasource.password={cipher}e5a81822623a6cf93fb7b9640238ec73c14c897fd2bc4e759a68956e1effe052
-
启动服务测试:
服务测试
客户端访问数据测试
二、非对称加密
1.什么是非对称加密:
- 对称加密和非对称加密的区别:
(1)对称加密算法在加密和解密时使用的是同一个秘钥;
(2)非对称加密算法需要两个秘钥进行加密和解密,这两个秘钥一个是公开秘钥(public key,简称公钥)一个是私有秘钥(private key,简称私钥)。
- 非对称加密示例:
示例甲乙之间使用非对称加密的方式完成了重要信息的安全传输。
(1)乙方生成一对密钥(公钥和私钥)并将公钥向其他方公开。
(2)得到该公司公钥的甲方使用该密钥对机密信息进行加密后的信息再发送给乙方。
(3)乙方再用自己保存的另一个专用密钥(私钥)对加密后的信息进行解密。
2.Java-keytool的使用:
Keytool 是一个Java数据证书的管理工具 。
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。
keystore 文件,包含两种数据:密钥实体(Key entity)-密钥(secret key)或者是私钥和配对公 钥(采用非对称加密)可信任的证书实体(trusted certificate entries)-只包含公钥。
- 使用Keytool创建证书:
示例进入dos命令行找到jdk下的bin目录中的tool工具;
执行:keytool -genkeypair -alias "别名" -keyalg "RSA" -keystore "生成的文件名.keystore";
3.使用非对称加密算法实现配置文件的加密和解密:
-
创建配置中心的服务端:
示例 - 修改POM文件:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
- 修改配置文件:
spring.application.name=config-server-rsa
server.port=9030
#设置服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#Git 配置
spring.cloud.config.server.git.uri=https://gitee.com/zwzy/config
#Git私有仓库的用户名和密码
#spring.cloud.config.server.git.username=
#spring.cloud.config.server.git.password=
#keytool -genkeypair -alias "config-info" -keyalg "RSA" -keystore "encrypt-info.keystore"
# keystore 文件的路径
encrypt.key-store.location=classpath:encrypt-info.keystore
# alias 指定密钥对的别名,该别名是公开的;
encrypt.key-store.alias=config-info
# storepass 密钥仓库
encrypt.key-store.password=admin123
# keypass 用来保护所生成密钥对中的私钥
encrypt.key-store.secret=admin123
- 修改启动类:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
测试:
示例
4.创建配置中心的客户端:
使用的是e-book中的Product-Provider服务- 修改配置文件,添加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 修改配置文件:
spring.application.name=config-product-provider-rsa
server.port=9010
#设置服务注册中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默认 false,这里设置 true,表示开启读取配置中心的配置
spring.cloud.config.discovery.enabled=true
#对应 eureka 中的配置中心 serviceId,默认是configserver
spring.cloud.config.discovery.serviceId=config-server-rsa
#git标签
spring.cloud.config.label=master
-
使用HttpClientUtil工具生成加密信息:
示例 -
在远程仓库中创建配置文件:
示例配置文件名必须和服务名相同
#----mysql-db-------
mybatis.type-aliases-package=com.book.product.pojo
mybatis.mapper-locations==classpath:com/book/product/mapper/*.xml
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/book-product?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
spring.datasource.username={cipher}AQBEIUdu8aSj5g/HTSgnuUFdRLJWNMIZzyE0mduYgkolAV4K6Ay4QXZdk9QDiUzRBpFRkBDHfdMs1cL8mRdsSiMLI9+/RcF4uvGgTO3UIGL5jkj356ASmwuhyCFu30OosdNIaMmBzC0VVUQDFY1xYy9/rSw/m47btzlNp4oRF+wrNmkmUFy6jz5Gma1jIh02rvIjpfgTmIZ23+llgMG33PwTeOD/FFcZ9JmgPp3cCOSJVQp65lqOVFvR+ZHt2gHHSARLqhUWO2cKRi6+czcSQ2RaCVE45ZnHleRHABH5MjkBwuBXUL2SAbMoA9ZIMntkxkehT5axqTNq0/l3xHt9mXkzQCtm3T1IDUhlB5zJgop+lHglyTGFthDTogrp8irZE3w=
spring.datasource.password={cipher}AQBEIUdu8aSj5g/HTSgnuUFdRLJWNMIZzyE0mduYgkolAV4K6Ay4QXZdk9QDiUzRBpFRkBDHfdMs1cL8mRdsSiMLI9+/RcF4uvGgTO3UIGL5jkj356ASmwuhyCFu30OosdNIaMmBzC0VVUQDFY1xYy9/rSw/m47btzlNp4oRF+wrNmkmUFy6jz5Gma1jIh02rvIjpfgTmIZ23+llgMG33PwTeOD/FFcZ9JmgPp3cCOSJVQp65lqOVFvR+ZHt2gHHSARLqhUWO2cKRi6+czcSQ2RaCVE45ZnHleRHABH5MjkBwuBXUL2SAbMoA9ZIMntkxkehT5axqTNq0/l3xHt9mXkzQCtm3T1IDUhlB5zJgop+lHglyTGFthDTogrp8irZE3w=
-
测试:
测试配置中心服务端
访问服务测试配置信息是否可用
三、配置中心的安全认证
为了让服务更安全,在获取配置信息时需要进行安全验证。
1.创建配置中心服务端:
示例- 修改POM文件,添加依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
- 修改配置文件:
spring.application.name=config-server-encryption-sym-security
server.port=9030
#设置服务注册中心地址
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#Git 配置
spring.cloud.config.server.git.uri=https://gitee.com/zwzy/config
#Git私有仓库的用户名和密码
#spring.cloud.config.server.git.username=
#spring.cloud.config.server.git.password=
#配置密钥
encrypt.key=admin
- 添加安全认证
# 安全认证 #开启基于 http basic 的安全认证
security.basic.enabled=true
security.user.name=user
security.user.password=123456
- 修改启动类:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
测试:
添加安全认证
示例
2.创建配置中心客户端:
使用e-book的Product-Provider服务- 修改POM文件,添加坐标依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 修改配置文件(配置文件名bootstrap.properties):
spring.application.name=config-e-book-product-provider
server.port=9010
#设置服务注册中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默认 false,这里设置 true,表示开启读取配置中心的配置
spring.cloud.config.discovery.enabled=true
#对应 eureka 中的配置中心 serviceId,默认是configserver
spring.cloud.config.discovery.serviceId=config-server-encryption-sym
#git标签
spring.cloud.config.label=master
#安全保护
spring.cloud.config.username=user
spring.cloud.config.password=123456
-
测试:
示例
网友评论