spring-cloud-config安全問題


配置服務的安全問題會很重要,其中的內容是我自己學習的,由於學習時間不長,有可能不是很完備,如果有更好的方案,煩請評論中留言或私信,謝謝!

1. 首先訪問配置服務需要設置密碼:

使用spring-security使得這件事變得很簡單,在pom.xml中引入依賴

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
  </dependency>

在application.properties中指定用戶名和密碼,

security.user.name=user
security.user.password=yourPW

如果不指定,用戶名默認是user,密碼會使用隨機密碼寫入到log中。配置客戶端也是需要提供賬號密碼才能訪問的,配置客戶端的搭建方案后面會說。

2. 大部分公司沒能力自己改造git倉庫,因此,機密性很高的配置放入git中並不安全。

配置服務提供了對配置的加密和解密,由於配置客戶端會很多,並不安全,建議將加密和解密全部放在配置服務中完成。

3. 加密配置文件內容:

Config Server 可以使用對稱(共享)密鑰或者非對稱密鑰(RSA密鑰對).就安全性來講,非對稱密鑰是優先選擇,但是,選擇對稱密鑰進行加解密處理顯得非常方便,因為,只需要簡單的配置一個屬性值.

加密使用公鑰完成,私鑰用來解密。原則上,如果你只想加密,服務器上只配置公鑰(用私鑰在本地自行解密)。實際中,建議將加密和解密全部放在配置服務中完成。原因是這種方式會把密鑰管理過程讓所有的客戶端都知道,而不是把焦點聚集在服務器上。從另外一個方面講,一個非常有益的建議是如果你的配置服務器相對不安全,只能有少數客戶端需要加密配置屬性。

加密配置:

  1. 生成密鑰庫

$ keytool -genkeypair -alias mytestkey -keyalg RSA \
  -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \
  -keypass changeme -keystore server.jks -storepass letmein

  2. 配置配置服務配置文件

encrypt:
  keyStore:
    location: classpath:/server.jks
    password: letmein
    alias: mytestkey
    secret: changeme

4. 如何加密配置文件內容信息

 經過上面的配置,配置服務器已經具備給配置文件內容加密與解密的能力,下面介紹如何進行加密和解密

服務器會暴露 /encrypt/decrypt接口。如果你想編輯遠程配置文件,你可以請求Config Server的/encrypt接口來加密。

逆操作也可以通過/decrypt 來完成。

你加密的值增加{cipher}前綴后,放入配置文件中即可,從配置服務器獲取的配置會是經過自動解密的內容。

當客戶端程序對主環境資源不能確定時,/encrypt 和/decrypt接口也接受帶有路徑形式的請求 /*/{name}/{profiles},這樣可以針對每個application(name)和profile進行詳細的控制加解密。

如果以這種細粒度的方式來控制加解密,你必須提供一個TextEncryptorLocator類型的@Bean,使用這個Bean 可以為每個名稱或profile創建不同的加密方法。默認提供的並沒有這個功能(所有加密使用相同的密鑰)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM