前言
創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括樂昌網(wǎng)站建設(shè)、樂昌網(wǎng)站制作、樂昌網(wǎng)頁(yè)制作以及樂昌網(wǎng)絡(luò)營(yíng)銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,樂昌網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到樂昌省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
要會(huì)用,首先要了解。圖懶得畫,借鑒網(wǎng)上大牛的圖吧,springcloud組建架構(gòu)如圖:
微服務(wù)架構(gòu)的應(yīng)用場(chǎng)景:
1、系統(tǒng)拆分,多個(gè)子系統(tǒng)
2、每個(gè)子系統(tǒng)可部署多個(gè)應(yīng)用,應(yīng)用之間負(fù)載均衡實(shí)現(xiàn)
3、需要一個(gè)服務(wù)注冊(cè)中心,所有的服務(wù)都在注冊(cè)中心注冊(cè),負(fù)載均衡也是通過在注冊(cè)中心注冊(cè)的服務(wù)來使用一定策略來實(shí)現(xiàn)。
4、所有的客戶端都通過同一個(gè)網(wǎng)關(guān)地址訪問后臺(tái)的服務(wù),通過路由配置,網(wǎng)關(guān)來判斷一個(gè)URL請(qǐng)求由哪個(gè)服務(wù)處理。請(qǐng)求轉(zhuǎn)發(fā)到服務(wù)上的時(shí)候也使用負(fù)載均衡。
5、服務(wù)之間有時(shí)候也需要相互訪問。例如有一個(gè)用戶模塊,其他服務(wù)在處理一些業(yè)務(wù)的時(shí)候,要獲取用戶服務(wù)的用戶數(shù)據(jù)。
6、需要一個(gè)斷路器,及時(shí)處理服務(wù)調(diào)用時(shí)的超時(shí)和錯(cuò)誤,防止由于其中一個(gè)服務(wù)的問題而導(dǎo)致整體系統(tǒng)的癱瘓。
7、還需要一個(gè)監(jiān)控功能,監(jiān)控每個(gè)服務(wù)調(diào)用花費(fèi)的時(shí)間等。
引言
在微服務(wù)架構(gòu)中,我們通常都會(huì)采用DevOps的組織方式來降低因團(tuán)隊(duì)間溝通造成的巨大成本,以加速微服務(wù)應(yīng)用的交付能力。這就使得原本由運(yùn)維團(tuán)隊(duì)控制的線上信息將交由微服務(wù)所屬組織的成員自行維護(hù),其中將會(huì)包括大量的敏感信息,比如:數(shù)據(jù)庫(kù)的賬戶與密碼等。很顯然,如果我們直接將敏感信息以明文的方式存儲(chǔ)于微服務(wù)應(yīng)用的配置文件中是非常危險(xiǎn)的。針對(duì)這個(gè)問題,Spring Cloud Config提供了對(duì)屬性進(jìn)行加密解密的功能,以保護(hù)配置文件中的信息安全。比如下面的例子:
spring.datasource.username=didi spring.datasource.password={cipher}dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b
在Spring Cloud Config中通過在屬性值前使用{cipher}前綴來標(biāo)注該內(nèi)容是一個(gè)加密值,當(dāng)微服務(wù)客戶端來加載配置時(shí),配置中心會(huì)自動(dòng)的為帶有{cipher}前綴的值進(jìn)行解密。通過該機(jī)制的實(shí)現(xiàn),運(yùn)維團(tuán)隊(duì)就可以放心的將線上信息的加密資源給到微服務(wù)團(tuán)隊(duì),而不用擔(dān)心這些敏感信息遭到泄露了。下面我們來具體介紹如何在配置中心使用該項(xiàng)功能。
使用前提
在使用Spring Cloud Config的加密解密功能時(shí),有一個(gè)必要的前提需要我們注意。為了啟用該功能,我們需要在配置中心的運(yùn)行環(huán)境中安裝不限長(zhǎng)度的JCE版本(Unlimited Strength Java Cryptography Extension)。雖然,JCE功能在JRE中自帶,但是默認(rèn)使用的是有長(zhǎng)度限制的版本。我們可以從Oracle的官方網(wǎng)站中下載到它,它是一個(gè)壓縮包,解壓后可以看到下面三個(gè)文件:
README.txt local_policy.jar US_export_policy.jar
我們需要將local_policy.jar和US_export_policy.jar兩個(gè)文件復(fù)制到$JAVA_HOME/jre/lib/security目錄下,覆蓋原來的默認(rèn)內(nèi)容。到這里,加密解密的準(zhǔn)備工作就完成了。
相關(guān)端點(diǎn)
在完成了JCE的安裝后,可以嘗試啟動(dòng)配置中心。在控制臺(tái)中,將會(huì)輸出了一些配置中心特有的端點(diǎn),主要包括:
可以嘗試通過GET請(qǐng)求訪問/encrypt/status端點(diǎn),我們將得到如下內(nèi)容:
{ "description": "No key was installed for encryption service", "status": "NO_KEY" }
該返回說明當(dāng)前配置中心的加密功能還不能使用,因?yàn)闆]有為加密服務(wù)配置對(duì)應(yīng)的密鑰。
配置密鑰
我們可以通過encrypt.key屬性在配置文件中直接指定密鑰信息(對(duì)稱性密鑰),比如:
encrypt.key=didispace
加入上述配置信息后,重啟配置中心,再訪問/encrypt/status端點(diǎn),我們將得到如下內(nèi)容:
{ "status": "OK" }
此時(shí),我們配置中心的加密解密功能就已經(jīng)可以使用了,不妨嘗試訪問一下/encrypt和/decrypt端點(diǎn)來進(jìn)行加密和解密的功能。注意,這兩個(gè)端點(diǎn)都是POST請(qǐng)求,加密和解密信息需要通過請(qǐng)求體來發(fā)送。比如,以curl命令為例,我們可以通過下面的方式調(diào)用加密與解密端點(diǎn):
$ curl localhost:7001/encrypt -d didispace 3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7 $ curl localhost:7001/decrypt -d 3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7 didispace
這里,我們通過配置encrypt.key參數(shù)來指定密鑰的實(shí)現(xiàn)方式采用了對(duì)稱性加密。這種方式實(shí)現(xiàn)比較簡(jiǎn)單,只需要配置一個(gè)參數(shù)即可。另外,我們也可以使用環(huán)境變量ENCRYPT_KEY來進(jìn)行配置,讓密鑰信息外部化存儲(chǔ)。
非對(duì)稱加密
Spring Cloud Config的配置中心不僅可以使用對(duì)稱性加密,也可以使用非對(duì)稱性加密(比如:RSA密鑰對(duì))。雖然非對(duì)稱性加密的密鑰生成與配置相對(duì)復(fù)雜一些,但是它具有更高的安全性。下面,我們來具體介紹一下如何使用非對(duì)稱加密。
首先,我們需要通過keytool工具來生成密鑰對(duì)。keytool是JDK中的一個(gè)密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對(duì)及相關(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
輸入密鑰庫(kù)口令:
再次輸入新口令:
您的名字與姓氏是什么?
[Unknown]: zhaiyongchao
您的組織單位名稱是什么?
[Unknown]: company
您的組織名稱是什么?
[Unknown]: organization
您所在的城市或區(qū)域名稱是什么?
[Unknown]: city
您所在的省/市/自治區(qū)名稱是什么?
[Unknown]: province
該單位的雙字母國(guó)家/地區(qū)代碼是什么?
[Unknown]: china
CN=zhaiyongchao, OU=company, O=organization, L=city, ST=province, C=china是否正確?
[否]: y輸入 <config-server> 的密鑰口令
(如果和密鑰庫(kù)口令相同, 按回車):
再次輸入新口令:
另外,如果我們不想逐步的輸入那些提示信息,可以使用-dname來直接指定,而密鑰庫(kù)口令與密鑰口令可使用-storepass和-keypass來直接指定。所以,我們可以通過下面的命令直接創(chuàng)建出與上述命令一樣的密鑰庫(kù):
$ 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ù)來實(shí)現(xiàn),比如我們可以通過下面的命令,讓密鑰的有效期延長(zhǎ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 \ -validity 365 \
上述的三種命令生成方式,最終都會(huì)在命令的當(dāng)前執(zhí)行目錄下生成一個(gè)config-server.keystore文件。下面,我們需要將它保存在配置中心的文件系統(tǒng)中的某個(gè)位置,比如放在當(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。另外,非對(duì)稱加密的配置信息也可以通過環(huán)境變量的方式進(jìn)行配置,它們對(duì)應(yīng)的具體變量名如下:
ENCRYPT_KEY_STORE_LOCATION ENCRYPT_KEY_STORE_ALIAS ENCRYPT_KEY_STORE_PASSWORD ENCRYPT_KEY_STORE_SECRET
通過環(huán)境變量來配置密鑰庫(kù)相關(guān)信息可以獲得更好的安全性,所以我們可以將敏感的口令信息存儲(chǔ)在配置中心的環(huán)境變量中是一種不錯(cuò)的選擇。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。
本文標(biāo)題:SpringCloud微服務(wù)架構(gòu)的構(gòu)建:分布式配置中心(加密解密功能)
文章起源:http://aaarwkj.com/article48/jeepep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號(hào)、定制網(wǎng)站、微信小程序、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)