欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)

 更新時間:2018年05月02日 09:57:04   作者:程序猿DD  
這篇文章主要給大家介紹了關(guān)于Spring Cloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

要會用,首先要了解。圖懶得畫,借鑒網(wǎng)上大牛的圖吧,springcloud組建架構(gòu)如圖:

微服務(wù)架構(gòu)的應(yīng)用場景:

      1、系統(tǒng)拆分,多個子系統(tǒng)

      2、每個子系統(tǒng)可部署多個應(yīng)用,應(yīng)用之間負(fù)載均衡實現(xiàn)

      3、需要一個服務(wù)注冊中心,所有的服務(wù)都在注冊中心注冊,負(fù)載均衡也是通過在注冊中心注冊的服務(wù)來使用一定策略來實現(xiàn)。

      4、所有的客戶端都通過同一個網(wǎng)關(guān)地址訪問后臺的服務(wù),通過路由配置,網(wǎng)關(guān)來判斷一個URL請求由哪個服務(wù)處理。請求轉(zhuǎn)發(fā)到服務(wù)上的時候也使用負(fù)載均衡。

      5、服務(wù)之間有時候也需要相互訪問。例如有一個用戶模塊,其他服務(wù)在處理一些業(yè)務(wù)的時候,要獲取用戶服務(wù)的用戶數(shù)據(jù)。

      6、需要一個斷路器,及時處理服務(wù)調(diào)用時的超時和錯誤,防止由于其中一個服務(wù)的問題而導(dǎo)致整體系統(tǒng)的癱瘓。

      7、還需要一個監(jiān)控功能,監(jiān)控每個服務(wù)調(diào)用花費的時間等。

引言

在微服務(wù)架構(gòu)中,我們通常都會采用DevOps的組織方式來降低因團隊間溝通造成的巨大成本,以加速微服務(wù)應(yīng)用的交付能力。這就使得原本由運維團隊控制的線上信息將交由微服務(wù)所屬組織的成員自行維護,其中將會包括大量的敏感信息,比如:數(shù)據(jù)庫的賬戶與密碼等。很顯然,如果我們直接將敏感信息以明文的方式存儲于微服務(wù)應(yīng)用的配置文件中是非常危險的。針對這個問題,Spring Cloud Config提供了對屬性進行加密解密的功能,以保護配置文件中的信息安全。比如下面的例子:

spring.datasource.username=didi
spring.datasource.password={cipher}dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b

在Spring Cloud Config中通過在屬性值前使用{cipher}前綴來標(biāo)注該內(nèi)容是一個加密值,當(dāng)微服務(wù)客戶端來加載配置時,配置中心會自動的為帶有{cipher}前綴的值進行解密。通過該機制的實現(xiàn),運維團隊就可以放心的將線上信息的加密資源給到微服務(wù)團隊,而不用擔(dān)心這些敏感信息遭到泄露了。下面我們來具體介紹如何在配置中心使用該項功能。

使用前提

在使用Spring Cloud Config的加密解密功能時,有一個必要的前提需要我們注意。為了啟用該功能,我們需要在配置中心的運行環(huán)境中安裝不限長度的JCE版本(Unlimited Strength Java Cryptography Extension)。雖然,JCE功能在JRE中自帶,但是默認(rèn)使用的是有長度限制的版本。我們可以從Oracle的官方網(wǎng)站中下載到它,它是一個壓縮包,解壓后可以看到下面三個文件:

README.txt
local_policy.jar
US_export_policy.jar

我們需要將local_policy.jar和US_export_policy.jar兩個文件復(fù)制到$JAVA_HOME/jre/lib/security目錄下,覆蓋原來的默認(rèn)內(nèi)容。到這里,加密解密的準(zhǔn)備工作就完成了。

相關(guān)端點

在完成了JCE的安裝后,可以嘗試啟動配置中心。在控制臺中,將會輸出了一些配置中心特有的端點,主要包括:

  • /encrypt/status:查看加密功能狀態(tài)的端點
  • /key:查看密鑰的端點
  • /encrypt:對請求的body內(nèi)容進行加密的端點
  • /decrypt:對請求的body內(nèi)容進行解密的端點

可以嘗試通過GET請求訪問/encrypt/status端點,我們將得到如下內(nèi)容:

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

該返回說明當(dāng)前配置中心的加密功能還不能使用,因為沒有為加密服務(wù)配置對應(yīng)的密鑰。

配置密鑰

我們可以通過encrypt.key屬性在配置文件中直接指定密鑰信息(對稱性密鑰),比如:

encrypt.key=didispace

加入上述配置信息后,重啟配置中心,再訪問/encrypt/status端點,我們將得到如下內(nèi)容:

{
 "status": "OK"
}

此時,我們配置中心的加密解密功能就已經(jīng)可以使用了,不妨嘗試訪問一下/encrypt和/decrypt端點來進行加密和解密的功能。注意,這兩個端點都是POST請求,加密和解密信息需要通過請求體來發(fā)送。比如,以curl命令為例,我們可以通過下面的方式調(diào)用加密與解密端點:

$ curl localhost:7001/encrypt -d didispace
3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7

$ curl localhost:7001/decrypt -d 3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7
didispace

這里,我們通過配置encrypt.key參數(shù)來指定密鑰的實現(xiàn)方式采用了對稱性加密。這種方式實現(xiàn)比較簡單,只需要配置一個參數(shù)即可。另外,我們也可以使用環(huán)境變量ENCRYPT_KEY來進行配置,讓密鑰信息外部化存儲。

非對稱加密

Spring Cloud Config的配置中心不僅可以使用對稱性加密,也可以使用非對稱性加密(比如:RSA密鑰對)。雖然非對稱性加密的密鑰生成與配置相對復(fù)雜一些,但是它具有更高的安全性。下面,我們來具體介紹一下如何使用非對稱加密。

首先,我們需要通過keytool工具來生成密鑰對。keytool是JDK中的一個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對及相關(guān)證書,用于(通過數(shù)字簽名)自我認(rèn)證(用戶向別的用戶/服務(wù)認(rèn)證自己)或數(shù)據(jù)完整性以及認(rèn)證服務(wù)。在JDK 1.4以后的版本中都包含了這一工具,它的位置在:%JAVA_HOME%\bin\keytool.exe。

生成密鑰的具體命令如下:

$ keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore
輸入密鑰庫口令:
再次輸入新口令:
您的名字與姓氏是什么?
  [Unknown]:  zhaiyongchao
您的組織單位名稱是什么?
  [Unknown]:  company
您的組織名稱是什么?
  [Unknown]:  organization
您所在的城市或區(qū)域名稱是什么?
  [Unknown]:  city
您所在的省/市/自治區(qū)名稱是什么?
  [Unknown]:  province
該單位的雙字母國家/地區(qū)代碼是什么?
  [Unknown]:  china
CN=zhaiyongchao, OU=company, O=organization, L=city, ST=province, C=china是否正確?
  [否]:  y

輸入 <config-server> 的密鑰口令
        (如果和密鑰庫口令相同, 按回車):
再次輸入新口令:

另外,如果我們不想逐步的輸入那些提示信息,可以使用-dname來直接指定,而密鑰庫口令與密鑰口令可使用-storepass和-keypass來直接指定。所以,我們可以通過下面的命令直接創(chuàng)建出與上述命令一樣的密鑰庫:

$ keytool -genkeypair -alias config-server -keyalg RSA \ 
 -dname "CN=zhaiyongchao, OU=company, O=organization, L=city, ST=province, C=china" \
 -keypass 222222 \
 -keystore config-server.keystore \
 -storepass 111111 \

默認(rèn)情況下,上述命令創(chuàng)建的密鑰只有90天有效期。如果我們想要調(diào)整它的有效期,可以通過增加-validity參數(shù)來實現(xiàn),比如我們可以通過下面的命令,讓密鑰的有效期延長到一年:

$ keytool -genkeypair -alias config-server -keyalg RSA \ 
 -dname "CN=zhaiyongchao, OU=company, O=organization, L=city, ST=province, C=china" \
 -keypass 222222 \
 -keystore config-server.keystore \
 -storepass 111111 \
 -validity 365 \

上述的三種命令生成方式,最終都會在命令的當(dāng)前執(zhí)行目錄下生成一個config-server.keystore文件。下面,我們需要將它保存在配置中心的文件系統(tǒng)中的某個位置,比如放在當(dāng)前的用戶目錄下,然后在配置中心中加入相關(guān)的配置信息:

encrypt.key-store.location=file://${user.home}/config-server.keystore
encrypt.key-store.alias=config-server
encrypt.key-store.password=111111
encrypt.key-store.secret=222222

如果我們將config-server.keystore放在配置中心的src/main/resource目錄下,也可以直接這樣配置:encrypt.key-store.location=config-server.keystore。另外,非對稱加密的配置信息也可以通過環(huán)境變量的方式進行配置,它們對應(yīng)的具體變量名如下:

ENCRYPT_KEY_STORE_LOCATION
ENCRYPT_KEY_STORE_ALIAS
ENCRYPT_KEY_STORE_PASSWORD
ENCRYPT_KEY_STORE_SECRET

通過環(huán)境變量來配置密鑰庫相關(guān)信息可以獲得更好的安全性,所以我們可以將敏感的口令信息存儲在配置中心的環(huán)境變量中是一種不錯的選擇。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • RabbitMQ消息的延遲隊列詳解

    RabbitMQ消息的延遲隊列詳解

    這篇文章主要介紹了RabbitMQ消息的延遲隊列,延遲隊列也就是死信交換機,有些隊列的消息成為死信后,消息中間件可以將其從當(dāng)前隊列發(fā)送到另一個隊列中,這個隊列就是死信隊列,感興趣的同學(xué)可以參考下文
    2024-02-02
  • Java學(xué)習(xí)之線程同步與線程間通信詳解

    Java學(xué)習(xí)之線程同步與線程間通信詳解

    這篇文章主要為大家詳細(xì)介紹了線程同步和線程之間的通信的相關(guān)知識,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Java有一定的幫助,感興趣的可以了解一下
    2022-12-12
  • java實現(xiàn)求兩個字符串最長公共子串的方法

    java實現(xiàn)求兩個字符串最長公共子串的方法

    這篇文章主要介紹了java實現(xiàn)求兩個字符串最長公共子串的方法,是一道華為OJ上的一道題目,涉及Java針對字符串的遍歷、轉(zhuǎn)換及流程控制等技巧,需要的朋友可以參考下
    2015-12-12
  • 如何將Mybatis連接到ClickHouse

    如何將Mybatis連接到ClickHouse

    這篇文章主要介紹了如何將Mybatis連接到ClickHouse,幫助大家更好得理解和學(xué)習(xí)使用Mybatis,感興趣的朋友可以了解下
    2021-03-03
  • Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解

    這篇文章主要介紹了Java并發(fā)工具之Exchanger線程間交換數(shù)據(jù)詳解,Exchanger是一個用于線程間協(xié)作的工具類,Exchanger用于進行線程間的數(shù)據(jù)交 換,它提供一個同步點,在這個同步點,兩個線程可以交換彼此的數(shù)據(jù),需要的朋友可以參考下
    2023-12-12
  • SpringBoot2.0整合jackson配置日期格式化和反序列化的實現(xiàn)

    SpringBoot2.0整合jackson配置日期格式化和反序列化的實現(xiàn)

    這篇文章主要介紹了SpringBoot2.0整合jackson配置日期格式化和反序列化的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • mybatis數(shù)組和集合的長度判斷及插入方式

    mybatis數(shù)組和集合的長度判斷及插入方式

    這篇文章主要介紹了mybatis數(shù)組和集合的長度判斷及插入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java  StringBuilder類的詳解及簡單實例

    java StringBuilder類的詳解及簡單實例

    這篇文章主要介紹了java StringBuilder類的詳解及簡單實例的相關(guān)資料,實現(xiàn)了StringBuilder類的追加、插入、替換、刪除等操作,需要的朋友可以參考下
    2017-08-08
  • 淺談Java序列化和hessian序列化的差異

    淺談Java序列化和hessian序列化的差異

    這篇文章主要通過對二者簡單的實現(xiàn)方式的對比,介紹了Java序列化和hessian序列化的差異,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Json轉(zhuǎn)換工具類

    Json轉(zhuǎn)換工具類

    今天小編就為大家分享一篇關(guān)于Json轉(zhuǎn)換工具類,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評論