配置服務的安全問題會很重要,其中的內容是我本身學習的,因爲學習時間不長,有可能不是很完備,若是有更好的方案,煩請評論中留言或私信,謝謝!java
1. 首先訪問配置服務須要設置密碼:git
使用spring-security使得這件事變得很簡單,在pom.xml中引入依賴spring
<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中並不安全。app
配置服務提供了對配置的加密和解密,因爲配置客戶端會不少,並不安全,建議將加密和解密所有放在配置服務中完成。spring-boot
3. 加密配置文件內容:學習
Config Server 可使用對稱(共享)密鑰或者非對稱密鑰(RSA密鑰對).就安全性來說,非對稱密鑰是優先選擇,可是,選擇對稱密鑰進行加解密處理顯得很是方便,由於,只須要簡單的配置一個屬性值.加密
加密使用公鑰完成,私鑰用來解密。原則上,若是你只想加密,服務器上只配置公鑰(用私鑰在本地自行解密)。實際中,建議將加密和解密所有放在配置服務中完成。緣由是這種方式會把密鑰管理過程讓全部的客戶端都知道,而不是把焦點彙集在服務器上。從另一個方面講,一個很是有益的建議是若是你的配置服務器相對不安全,只能有少數客戶端須要加密配置屬性。spa
加密配置:
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建立不一樣的加密方法。默認提供的並無這個功能(全部加密使用相同的密鑰)。