加密和解密
重要 | |
---|---|
要使用加密和解密功能,您需要在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編碼的字符,則應使用該 |
確保不要在加密值中包含任何curl命令統計信息。將值輸出到文件可以幫助避免此問題。 |
反向操作也可以通過以下方式獲得/decrypt
(如果服務器配置有對稱密鑰或完整密鑰對),如以下示例所示:
$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret
如果您使用curl進行測試,則使用 |
在將加密的值{cipher}
放入YAML或屬性文件中之前,在提交併將其推送到遠程(可能不安全)存儲之前,請獲取加密的值並添加前綴。
該/encrypt
和/decrypt
終點還兼有接受的形式路徑/*/{application}/{profiles}
,當客戶打電話到主環境資源,這可以用來控制加密的每個應用程序(名稱)和每個配置文件的基礎。
要以這種精細的方式控制加密,還必須提供一種 |
該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+...
該 |