Spring Cloud 加密和解密

加密和解密

重要

要使用加密和解密功能,您需要在JVM中安裝完整功能的JCE(默認情況下不包括)。您可以從Oracle 下載“ Java密碼學擴展(JCE)無限強度轄區策略文件 ”並按照安裝說明進行操作(本質上,您需要用下載的JRE lib / security目錄替換這兩個策略文件)。

如果遠程屬性源包含加密的內容(以開頭的值{cipher}),則將其解密,然後再通過HTTP發送給客戶端。此設置的主要優點是,當屬性值處於“ 靜止 ”狀態時(例如,在git存儲庫中),不需要使用純文本格式。如果無法解密一個值,則將其從屬性源中刪除,並使用相同的鍵但以前綴invalid和值表示“ 不適用 ”(通常<n/a>)的方式添加其他屬性。這很大程度上是爲了防止將密文用作密碼並意外泄漏。

如果爲配置客戶端應用程序設置遠程配置存儲庫,則它可能包含application.yml與以下內容類似的內容:

application.yml。 

spring:
  datasource:
    username: dbuser
    password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'

 

.properties文件中的加密值不能用引號引起來。否則,該值不會解密。以下示例顯示了有效的值:

application.properties。 

spring.datasource.username: dbuser
spring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ

 

您可以安全地將此純文本推送到共享的git存儲庫,並且祕密密碼仍然受到保護。

服務器還公開/encrypt/decrypt終結點(假設它們是安全的,並且只能由授權代理訪問)。如果您編輯遠程配置文件,則可以使用Config Server通過POST到/encrypt端點來加密值,如以下示例所示:

$ curl localhost:8888/encrypt -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda

如果您加密的值中包含需要URL編碼的字符,則應使用該--data-urlencode選項來curl確保其編碼正確。

確保不要在加密值中包含任何curl命令統計信息。將值輸出到文件可以幫助避免此問題。

反向操作也可以通過以下方式獲得/decrypt(如果服務器配置有對稱密鑰或完整密鑰對),如以下示例所示:

$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret
       

如果您使用curl進行測試,則使用--data-urlencode(而不是-d)或設置顯式值Content-Type: text/plain以確保在有特殊字符時,curl可以正確編碼數據('+'特別棘手)。

在將加密的值{cipher}放入YAML或屬性文件中之前,在提交併將其推送到遠程(可能不安全)存儲之前,請獲取加密的值並添加前綴。

/encrypt/decrypt終點還兼有接受的形式路徑/*/{application}/{profiles},當客戶打電話到主環境資源,這可以用來控制加密的每個應用程序(名稱)和每個配置文件的基礎。

       

要以這種精細的方式控制加密,還必須提供一種@Bean類型TextEncryptorLocator,該類型針對每個名稱和配置文件創建不同的加密器。默認情況下不提供(所有加密使用相同的密鑰)。

spring命令行客戶機(安裝彈簧雲CLI擴展)也可以用於加密和解密,因爲顯示在下面的例子:

$ spring encrypt mysecret --key foo
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
$ spring decrypt --key foo 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret

要使用文件中的密鑰(例如用於加密的RSA公鑰),請在密鑰值前添加“ @”並提供文件路徑,如以下示例所示:

$ spring encrypt mysecret --key @${HOME}/.ssh/id_rsa.pub
AQAjPgt3eFZQXwt8tsHAVv/QHiY5sI2dRcR+...

--key參數是強制性的(儘管有--前綴)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章