成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 開發工具 架構 分布式
在微服務架構中,我們通常都會采用DevOps的組織方式來降低因團隊間溝通造成的巨大成本,以加速微服務應用的交付能力。

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

[[230203]]

比如下面的例子:

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

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

使用前提

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

  1. README.txt 
  2. local_policy.jar 
  3. 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.   "description""No key was installed for encryption service"
  2.   "status""NO_KEY" 

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

配置密鑰

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

  1. encrypt.key=didispace 

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

  1.   "status""OK" 

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

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

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

非對稱加密

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

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

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

  1. $ keytool -genkeypair -alias config-server -keyalg RSA -keystore config-server.keystore 
  2. 輸入密鑰庫口令: 
  3. 再次輸入新口令: 
  4. 您的名字與姓氏是什么? 
  5.   [Unknown]:  zhaiyongchao 
  6. 您的組織單位名稱是什么? 
  7.   [Unknown]:  company 
  8. 您的組織名稱是什么? 
  9.   [Unknown]:  organization 
  10. 您所在的城市或區域名稱是什么? 
  11.   [Unknown]:  city 
  12. 您所在的省/市/自治區名稱是什么? 
  13.   [Unknown]:  province 
  14. 該單位的雙字母國家/地區代碼是什么? 
  15.   [Unknown]:  china 
  16. CN=zhaiyongchao, OU=company, O=organization, L=city, ST=province, C=china是否正確? 
  17.   [否]:  y 
  18.  
  19. 輸入 <config-server> 的密鑰口令 
  20.         (如果和密鑰庫口令相同, 按回車): 
  21. 再次輸入新口令: 

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

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

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

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

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

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

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

  1. ENCRYPT_KEY_STORE_LOCATION 
  2. ENCRYPT_KEY_STORE_ALIAS 
  3. ENCRYPT_KEY_STORE_PASSWORD 
  4. ENCRYPT_KEY_STORE_SECRET 

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

【本文為51CTO專欄作者“翟永超”的原創稿件,轉載請通過51CTO聯系作者獲取授權】

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-07-28 16:41:53

Spring Clou微服務架構

2018-07-19 14:58:14

Spring Clou微服務架構

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤

2018-04-16 14:56:56

微服務架構分布式服務

2018-04-18 16:07:49

Spring Clou微服務分布式

2018-03-13 16:42:26

分布式服務跟蹤

2018-04-09 13:56:13

微服務架構分布式

2018-04-02 15:01:31

微服務架構分布式服務

2021-03-17 10:51:16

架構運維技術

2017-06-26 09:06:10

Spring Clou微服務架構

2019-10-24 11:17:57

架構運維技術

2017-09-04 16:15:44

服務網關架構

2017-09-09 23:15:20

Spring Clou微服務架構路由

2023-08-25 16:26:49

微服務架構

2023-09-12 22:58:51

分布式架構微服務

2017-08-10 11:15:05

Spring Clou微服務架構

2017-08-09 15:50:47

Spring Clou微服務架構

2018-07-09 09:27:10

Spring Clou微服務架構

2017-07-03 09:50:07

Spring Clou微服務架構

2023-11-20 15:32:29

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 超碰97人人人人人蜜桃 | 久久艹免费视频 | 亚洲精品乱码久久久久v最新版 | a在线视频| 国产精品不卡一区 | 成人午夜影院 | 天堂av免费观看 | 自拍偷拍第一页 | 三级视频久久 | 久久高清 | 日韩美女在线看免费观看 | 亚洲专区在线 | 久久精品国产一区二区电影 | 欧美a级成人淫片免费看 | 99热国产精品| 日韩欧美手机在线 | 国产一级在线 | 色综合久 | 性天堂网 | 国产在线中文 | 欧美 日韩 中文 | 国产视频1 | 在线观看中文字幕 | 午夜视频网站 | 成人精品一区 | 日本在线一区二区三区 | 国产精品一区二区三区在线 | 免费国产一区二区 | 日韩欧美综合 | 亚洲精品无人区 | 日韩欧美久久精品 | 在线资源视频 | 天堂久久网 | 久久久久久久一区二区三区 | 一级黄色片日本 | 国产精品日日做人人爱 | 日韩欧美在线播放 | 国产精品国色综合久久 | 日韩中文电影 | 亚洲喷水 | 狠狠躁天天躁夜夜躁婷婷老牛影视 |