一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Cloud微服務架構的構建:分布式配置中心(加密解密功能)

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

2021-04-25 11:31程序猿DD Java教程

這篇文章主要給大家介紹了關于Spring Cloud微服務架構的構建:分布式配置中心(加密解密)的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用具有一定的參考學習價值,需要的朋友可以參考下

前言

要會用,首先要了解。圖懶得畫,借鑒網上大牛的圖吧,springcloud組建架構如圖:

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

微服務架構的應用場景:

      1、系統拆分,多個子系統

      2、每個子系統可部署多個應用,應用之間負載均衡實現

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

      4、所有的客戶端都通過同一個網關地址訪問后臺的服務,通過路由配置,網關來判斷一個url請求由哪個服務處理。請求轉發到服務上的時候也使用負載均衡。

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

      6、需要一個斷路器,及時處理服務調用時的超時和錯誤,防止由于其中一個服務的問題而導致整體系統的癱瘓。

      7、還需要一個監控功能,監控每個服務調用花費的時間等。

引言

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

?
1
2
spring.datasource.username=didi
spring.datasource.password={cipher}dba6505baa81d78bd08799d8d4429de499bd4c2053c05f029e7cfbf143695f5b

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

使用前提

在使用spring cloud config的加密解密功能時,有一個必要的前提需要我們注意。為了啟用該功能,我們需要在配置中心的運行環境中安裝不限長度的jce版本(unlimited strength java cryptography extension)。雖然,jce功能在jre中自帶,但是默認使用的是有長度限制的版本。我們可以從oracle的官方網站中下載到它,它是一個壓縮包,解壓后可以看到下面三個文件:

?
1
2
3
readme.txt
local_policy.jar
us_export_policy.jar

我們需要將local_policy.jar和us_export_policy.jar兩個文件復制到$java_home/jre/lib/security目錄下,覆蓋原來的默認內容。到這里,加密解密的準備工作就完成了。

相關端點

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

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

可以嘗試通過get請求訪問/encrypt/status端點,我們將得到如下內容:

?
1
2
3
4
{
 "description": "no key was installed for encryption service",
 "status": "no_key"
}

該返回說明當前配置中心的加密功能還不能使用,因為沒有為加密服務配置對應的密鑰。

配置密鑰

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

?
1
encrypt.key=didispace

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

?
1
2
3
{
 "status": "ok"
}

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

?
1
2
3
4
5
$ curl localhost:7001/encrypt -d didispace
3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7
 
$ curl localhost:7001/decrypt -d 3c70a809bfa24ab88bcb5e1df51cb9e4dd4b8fec88301eb7a18177f1769c849ae9c9f29400c920480be2c99406ae28c7
didispace

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

非對稱加密

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

首先,我們需要通過keytool工具來生成密鑰對。keytool是jdk中的一個密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對及相關證書,用于(通過數字簽名)自我認證(用戶向別的用戶/服務認證自己)或數據完整性以及認證服務。在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
您所在的城市或區域名稱是什么?
  [unknown]:  city
您所在的省/市/自治區名稱是什么?
  [unknown]:  province
該單位的雙字母國家/地區代碼是什么?
  [unknown]:  china
cn=zhaiyongchao, ou=company, o=organization, l=city, st=province, c=china是否正確?
  [否]:  y

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

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

?
1
2
3
4
5
$ 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 \

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

?
1
2
3
4
5
6
$ 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 \

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

?
1
2
3
4
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。另外,非對稱加密的配置信息也可以通過環境變量的方式進行配置,它們對應的具體變量名如下:

?
1
2
3
4
encrypt_key_store_location
encrypt_key_store_alias
encrypt_key_store_password
encrypt_key_store_secret

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.didispace.com/spring-cloud-starter-dalston-3-2/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩一区二区三区久久 | 免费在线观看伦理片 | 秘书小说| 天天曰| 韩国日本香港毛片免费 | 扒开女人屁股眼看个够 | 国产欧美日韩精品一区二区三区 | 亚洲欧美在线免费观看 | 精品国产中文字幕在线视频 | 成年极品漫画在线观看 | 日本破处 | 美女大鸡鸡 | 91久久偷偷做嫩草影院免费看 | 好大好深好涨好烫还要 | h视频免费高清在线观看 | 九九热视频 这里有精品 | 亚洲日本视频在线观看 | 国产精品视频久久久久 | 日本一区二区三区久久精品 | 十大免费批日的软件 | 好大好硬好深好爽想要吃奶 | 2019国内精品久久久久久 | 亚洲精品久久7777777 | 羞羞视频麻豆 | 四虎网址在线 | 精品国产乱码久久久久久免费 | 国产精品久久久久久久久免费hd | 波多野结衣之双方调教在线观看 | 免费老外的毛片清高 | 91热国内精品永久免费观看 | 国产日日干 | 欧美白人猛性xxxxx69交 | 女张腿男人桶羞羞漫画 | 成年人网站免费在线观看 | 91精品啪在线观看国产日本 | 99热这里有精品 | 亚洲男1069gay男猛男 | 手机看片1024国产 | 国产一级在线观看 | 欧美精品一区视频 | 丝袜老师好湿好紧我要进去了 |