一参淹、對(duì)稱加密
1.什么是對(duì)稱加密?
對(duì)稱加密是最快速乏悄、最簡(jiǎn)單的一種加密方式承二,加密(encryption)與解密(decryption)用的 是同樣的密鑰(secret key)。
2.檢查加密環(huán)境:
訪問:http://127.0.0.1:端口號(hào)/encrypt/status纲爸;
3.設(shè)置加密環(huán)境的步驟:
- 設(shè)置秘鑰KEY:
在配置文件中添加:encrypt.key=key值;
- 配置愛JCE:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html根據(jù)自己的jdk版本下載;
下載解壓后负蚊,把 jar 文件上傳到需要安裝 jce 機(jī)器上 JDK 或 JRE 的 security 目錄下神妹,覆蓋源文件 即可。
JDK:將兩個(gè) jar 文件放到%JDK_HOME%\jre\lib\security 下家妆;
JRE:將兩個(gè) jar 文件放到%JRE_HOME%\lib\security 下 鸵荠;
- Spring Cloud Bug:
Dalston.SR4、Dalston.SR3伤极、Dalston.SR2 版本不能對(duì)配置文件加密蛹找,若需要調(diào)整到 Dalston.SR1 https://github.com/spring-cloud/spring-cloud config/issues/767 ;
- 加密演示:
加密(post 請(qǐng)求):http://127.0.0.1:9030/encrypt 哨坪;
解密(post 請(qǐng)求):http://127.0.0.1:9030/decrypt 庸疾;
4.測(cè)試服務(wù)加密:
-
創(chuàng)建項(xiàng)目(配置中心的服務(wù)端):
示例 修改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
#設(shè)置服務(wù)注冊(cè)中心地址
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
- 修改啟動(dòng)類:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
測(cè)試:
示例 - 測(cè)試加密和解密:
使用HttpClientUtil工具類。
-
創(chuàng)建讀取配置中心配置內(nèi)容的項(xiàng)目(配置中心的客戶端):
使用的是e-book中的Product-Provider - 修改POM文件当编,添加坐標(biāo):
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 修改配置文件:
spring.application.name=config-e-book-product-provider
server.port=9010
#設(shè)置服務(wù)注冊(cè)中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默認(rèn) false,這里設(shè)置 true,表示開啟讀取配置中心的配置
spring.cloud.config.discovery.enabled=true
#對(duì)應(yīng) eureka 中的配置中心 serviceId届慈,默認(rèn)是configserver
spring.cloud.config.discovery.serviceId=config-server-encryption-sym
#git標(biāo)簽
spring.cloud.config.label=master
-
創(chuàng)建上傳到git遠(yuǎn)程倉庫的配置文件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
-
啟動(dòng)服務(wù)測(cè)試:
服務(wù)測(cè)試
客戶端訪問數(shù)據(jù)測(cè)試
二、非對(duì)稱加密
1.什么是非對(duì)稱加密:
- 對(duì)稱加密和非對(duì)稱加密的區(qū)別:
(1)對(duì)稱加密算法在加密和解密時(shí)使用的是同一個(gè)秘鑰忿偷;
(2)非對(duì)稱加密算法需要兩個(gè)秘鑰進(jìn)行加密和解密金顿,這兩個(gè)秘鑰一個(gè)是公開秘鑰(public key,簡(jiǎn)稱公鑰)一個(gè)是私有秘鑰(private key鲤桥,簡(jiǎn)稱私鑰)揍拆。
- 非對(duì)稱加密示例:
甲乙之間使用非對(duì)稱加密的方式完成了重要信息的安全傳輸。
(1)乙方生成一對(duì)密鑰(公鑰和私鑰)并將公鑰向其他方公開茶凳。
(2)得到該公司公鑰的甲方使用該密鑰對(duì)機(jī)密信息進(jìn)行加密后的信息再發(fā)送給乙方嫂拴。
(3)乙方再用自己保存的另一個(gè)專用密鑰(私鑰)對(duì)加密后的信息進(jìn)行解密。
2.Java-keytool的使用:
Keytool 是一個(gè)Java數(shù)據(jù)證書的管理工具 慧妄。
Keytool將密鑰(key)和證書(certificates)存在一個(gè)稱為keystore的文件中顷牌。
keystore 文件剪芍,包含兩種數(shù)據(jù):密鑰實(shí)體(Key entity)-密鑰(secret key)或者是私鑰和配對(duì)公 鑰(采用非對(duì)稱加密)可信任的證書實(shí)體(trusted certificate entries)-只包含公鑰塞淹。
- 使用Keytool創(chuàng)建證書:
進(jìn)入dos命令行找到j(luò)dk下的bin目錄中的tool工具;
執(zhí)行:keytool -genkeypair -alias "別名" -keyalg "RSA" -keystore "生成的文件名.keystore"罪裹;
3.使用非對(duì)稱加密算法實(shí)現(xiàn)配置文件的加密和解密:
-
創(chuàng)建配置中心的服務(wù)端:
示例 - 修改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
#設(shè)置服務(wù)注冊(cè)中心地址
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 指定密鑰對(duì)的別名饱普,該別名是公開的;
encrypt.key-store.alias=config-info
# storepass 密鑰倉庫
encrypt.key-store.password=admin123
# keypass 用來保護(hù)所生成密鑰對(duì)中的私鑰
encrypt.key-store.secret=admin123
- 修改啟動(dòng)類:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
測(cè)試:
示例
4.創(chuàng)建配置中心的客戶端:
- 修改配置文件,添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
- 修改配置文件:
spring.application.name=config-product-provider-rsa
server.port=9010
#設(shè)置服務(wù)注冊(cè)中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默認(rèn) false,這里設(shè)置 true,表示開啟讀取配置中心的配置
spring.cloud.config.discovery.enabled=true
#對(duì)應(yīng) eureka 中的配置中心 serviceId状共,默認(rèn)是configserver
spring.cloud.config.discovery.serviceId=config-server-rsa
#git標(biāo)簽
spring.cloud.config.label=master
-
使用HttpClientUtil工具生成加密信息:
示例 -
在遠(yuǎn)程倉庫中創(chuàng)建配置文件:
示例配置文件名必須和服務(wù)名相同
#----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=
-
測(cè)試:
測(cè)試配置中心服務(wù)端
訪問服務(wù)測(cè)試配置信息是否可用
三套耕、配置中心的安全認(rèn)證
為了讓服務(wù)更安全,在獲取配置信息時(shí)需要進(jìn)行安全驗(yàn)證峡继。
1.創(chuàng)建配置中心服務(wù)端:
- 修改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
#設(shè)置服務(wù)注冊(cè)中心地址
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
- 添加安全認(rèn)證
# 安全認(rèn)證 #開啟基于 http basic 的安全認(rèn)證
security.basic.enabled=true
security.user.name=user
security.user.password=123456
- 修改啟動(dòng)類:
@EnableConfigServer
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
-
測(cè)試:
添加安全認(rèn)證
示例
2.創(chuàng)建配置中心客戶端:
- 修改POM文件,添加坐標(biāo)依賴:
<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
#設(shè)置服務(wù)注冊(cè)中心
eureka.client.serviceUrl.defaultZone=http://admin:123456@eureka1:8761/eureka/,http://admin:123456@eureka2:8761/eureka/
#默認(rèn) false,這里設(shè)置 true,表示開啟讀取配置中心的配置
spring.cloud.config.discovery.enabled=true
#對(duì)應(yīng) eureka 中的配置中心 serviceId,默認(rèn)是configserver
spring.cloud.config.discovery.serviceId=config-server-encryption-sym
#git標(biāo)簽
spring.cloud.config.label=master
#安全保護(hù)
spring.cloud.config.username=user
spring.cloud.config.password=123456
-
測(cè)試:
示例