小編給大家分享一下Spring Cloud Config RSA簡介及使用RSA加密配置文件的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
成都創(chuàng)新互聯(lián)公司公司2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元山西做網(wǎng)站,已為上家服務(wù),為山西各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
Spring Cloud 為開發(fā)人員提供了一系列的工具來快速構(gòu)建分布式系統(tǒng)的通用模型 。例如:配置管理、服務(wù)發(fā)現(xiàn)、斷路由、智能路由、微代理、控制總線、一次性Token、全局鎖、決策競選、分布式session、集群狀態(tài)等等。分布式系統(tǒng)的協(xié)助需要一大堆的模型,使用Spring Cloud開發(fā)者能快速的建立支持實現(xiàn)這些模式的服務(wù)和應(yīng)用程序。他們將適用于任何分布式環(huán)境,無論是開發(fā)者的個人電腦還是生產(chǎn)環(huán)境,還是云平臺。
特性
Spring Cloud 專注于提供良好開箱即用的典型方案和可擴(kuò)展方式。
分布式/版本化配置
服務(wù)注冊/服務(wù)發(fā)現(xiàn)
路由
服務(wù)間調(diào)用
斷路器
全局鎖
領(lǐng)導(dǎo)選取和集群狀態(tài)監(jiān)控
分布式消息
簡介
RSA非對稱加密有著非常強大的安全性,HTTPS的SSL加密就是使用這種方法進(jìn)行HTTPS請求加密傳輸?shù)?。因為RSA算法會涉及Private Key和Public Key分別用來加密和解密,所以稱為非對稱加密。Private Key和Public Key有互操作性,即用private key加密的可以用public key解密,用public key加密的可以用private key解密。傳統(tǒng)的單向認(rèn)證則只用public key進(jìn)行加密,有private key的一方才可進(jìn)行解密。例如,一個web服務(wù)器會有一對private key和public key。瀏覽器客戶端保存著服務(wù)器的public key。當(dāng)客戶端需要向服務(wù)器發(fā)送數(shù)據(jù)時,就用服務(wù)器的public key進(jìn)行加密,然后服務(wù)器收到數(shù)據(jù)時,再用private key進(jìn)行解密??蛻舳蓑炞C服務(wù)器是否為真實的服務(wù)器時,會根據(jù)服務(wù)器提供的public key和自己本地保存的public key作比較,一致的話才能驗證服務(wù)器的真實性。
在我們的config server中,一些對加密要求比較高的可以采用RSA算法進(jìn)行數(shù)據(jù)的加密和解密。
項目源碼
Gitee碼云
生成測試Keystore
我們需要使用jdk自帶的keytool工具生成一個keystore,里邊保存了private key的信息,使用如下命令行:
keytool -genkeypair -alias config-server-key -keyalg RSA -dname "CN=Config Server,OU=Xuqian,O=My Own Company,L=Beijing,S=Beijing,C=CN" -keypass changeit
-keystore server.jks -storepass changeit
-genkeypair 參數(shù)即產(chǎn)生一對public key和private key。
-alias 指定key的別名,用于區(qū)分同一keystore中不同的key。
-keyalg 指定生成key的算法,這里使用默認(rèn)的RSA
-dname 指定common name,即CN,用以驗證key的身份。其中各項皆為自定義參數(shù),OU為單位名稱,O為組織名稱,L為城市,S為省份/州,C為國家
-keypass 為key的密碼
-keystore 為keystore的文件名
-storepass 訪問keystore的密碼
上述工具將產(chǎn)生的 privte key 保存在了名為server.jks的 key store 中。到目前為止,我們只產(chǎn)生了 private key,Spring Cloud Config Server 會根據(jù)我們提供的 key 的信息,每次會用程序生成一個 public key,參考如下源代碼
org.springframework.security.rsa.crypto.KeyStoreKeyFactory:
public KeyPair getKeyPair(String alias, char[] password) { try { synchronized (lock) { if (store == null) { synchronized (lock) { // 根據(jù)配置提供的 keystore 文件地址和密碼獲取 keystore 的實例對象 store = KeyStore.getInstance("jks"); store.load(resource.getInputStream(), this.password); } } } // 根據(jù)配置提供的 alias 和 password 從 keystore 中取得 private key RSAPrivateCrtKey key = (RSAPrivateCrtKey) store.getKey(alias, password); // 定義 Public Key 生成規(guī)則 RSAPublicKeySpec spec = new RSAPublicKeySpec(key.getModulus(), key.getPublicExponent()); // 生成 Public Key PublicKey publicKey = KeyFactory.getInstance("RSA").generatePublic(spec); return new KeyPair(publicKey, key); } catch (Exception e) { throw new IllegalStateException("Cannot load keys from store: " + resource, e); } }
這里使用了 Java Security API 來對key進(jìn)行操作。參見注釋。然后上邊的信息通過 configserver 中的 bootstrap.xml 配置文件提供:
encrypt: #key: Thisismysecretkey key-store: location: file://${user.home}/development/keys/server.jks password: changeit alias: config-server-key secret: changeit
因為我們不能同時使用對稱加密和非對稱加密,所以我們把 encrypt.key 配置注釋掉,然后指定非對稱加密的參數(shù):
location: Keystore 的文件路徑
password: keystore 的密碼
alias: key 的別名
secret: key的密碼
測試
我們繼續(xù)使用 encrypt API加密一項測試數(shù)據(jù):
curl http://localhost:8888/encrypt -d 23456789
返回加密后的字符:
AQAPWOUOh5WVexGgVv+bgtKc5E0d5Aba8VUKnzEXh37HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh3F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils=
然后測試解密
curl http://localhost:8888/decrypt -d AQAPWOUOh5+bgtKc5E0d5Aba8VUKnzEXh37HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh3F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils=
會返回
23456789
我們還可以修改web-client.yml來驗證:
#test: #password: '{cipher}94c1027141add9844ec47f0be13caebb6b38ed1dcf99811b1a5cd2b874c64407' user: password: '{cipher}AQAPWOUOh5WVexGgVv+bgtKc5E0d5Aba8VUKnzEXh37HyKSAbW+wyzDwZTbk5QYfXpoCAs413rdeNIdR2ez44nkjT5V+438/VQExySzjZPhP0xYXi9YIaJqA3+Ji+IWK8hrGtJ4dzxIkmItiimCOirLdZzZGDm/yklMUVh7lARSNuMxXGKlpdBPKYWdqHm57ob6Sb0ivm4H4mL1n4d3QUCuE7hh3F4Aw4oln7XueyMkRPTtPy8OpnBEEZhRfmaL/auVZquLU5jjMNJk9JiWOy+DSTscViY/MZ+dypv6F4AfDdVvog89sNmPzcUT+zmB8jXHdjLoKy+63RG326WffY9OPuImW6/kCWZHV6Vws55hHqRy713W6yDBlrQ/gYC3Wils='
注釋掉 test.password,新增一個 user.password 使用加密后的配置值。然后提交的gitee倉庫,通過 url 訪問此配置文件:
http://localhost:8888/web-client/default
得到如下結(jié)果:
{ "name": "web-client", "profiles": [ "default" ], "label": null, "version": "3044a5345fb86d09a043ca7404b9e57c8c13c512", "state": null, "propertySources": [ { "name": "https://gitee.com/zxuqian/spring-cloud-config-remote/web-client.yml", "source": { "message": "此條消息來自于遠(yuǎn)程配置倉庫", "management.endpoints.web.exposure.include": "*", "user.password": "23456789" } } ] }
以上是“Spring Cloud Config RSA簡介及使用RSA加密配置文件的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:SpringCloudConfigRSA簡介及使用RSA加密配置文件的示例分析
URL網(wǎng)址:http://muchs.cn/article20/ghicjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、微信小程序、移動網(wǎng)站建設(shè)、建站公司、營銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)