Spring Cloud學(xué)習(xí)day105:配置中心的安全與加密

一参淹、對(duì)稱加密

1.什么是對(duì)稱加密?

對(duì)稱加密是最快速乏悄、最簡(jiǎn)單的一種加密方式承二,加密(encryption)與解密(decryption)用的 是同樣的密鑰(secret key)。

2.檢查加密環(huán)境:

訪問:http://127.0.0.1:端口號(hào)/encrypt/status纲爸;

沒有為加密服務(wù)安裝秘鑰

安裝了秘鑰

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)建配置中心的客戶端:

使用的是e-book中的Product-Provider服務(wù)
  • 修改配置文件,添加依賴:
        <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)建配置中心客戶端:

使用e-book的Product-Provider服務(wù)
  • 修改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è)試:


    示例
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末康愤,一起剝皮案震驚了整個(gè)濱河市儡循,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌征冷,老刑警劉巖择膝,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異检激,居然都是意外死亡肴捉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門叔收,熙熙樓的掌柜王于貴愁眉苦臉地迎上來齿穗,“玉大人,你說我怎么就攤上這事今穿$土椋” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蓝晒,是天一觀的道長(zhǎng)腮出。 經(jīng)常有香客問我,道長(zhǎng)芝薇,這世上最難降的妖魔是什么胚嘲? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮洛二,結(jié)果婚禮上馋劈,老公的妹妹穿的比我還像新娘。我一直安慰自己晾嘶,他們只是感情好妓雾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著垒迂,像睡著了一般械姻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上机断,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天楷拳,我揣著相機(jī)與錄音,去河邊找鬼吏奸。 笑死欢揖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的奋蔚。 我是一名探鬼主播她混,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烈钞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤风秤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后仪媒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谢鹊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年算吩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佃扼。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡偎巢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兼耀,到底是詐尸還是另有隱情压昼,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布瘤运,位于F島的核電站窍霞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拯坟。R本人自食惡果不足惜但金,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望郁季。 院中可真熱鬧冷溃,春花似錦、人聲如沸梦裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽年柠。三九已至凿歼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彪杉,已是汗流浹背毅往。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工牵咙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留派近,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓洁桌,卻偏偏與公主長(zhǎng)得像渴丸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容