SpringCloud 加密和解密

2023-07-31 09:34 更新

重要:

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

如果遠程屬性源包含加密的內(nèi)容(值以?{cipher}?開頭),則在通過HTTP發(fā)送給客戶端之前,將對它們進行解密。此設置的主要優(yōu)點是,當屬性值處于“ 靜止 ”狀態(tài)時(例如,在git存儲庫中),不需要使用純文本格式。如果無法解密某個值,則將其從屬性源中刪除,并使用相同的密鑰添加一個附加屬性,但附加前綴為?invalid?和一個表示“ 不適用 ”的值(通常為?<n/a>?)。這很大程度上是為了防止將密文用作密碼并意外泄漏。

如果為配置客戶端應用程序設置了遠程配置存儲庫,則它可能包含與以下內(nèi)容類似的?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使用--data-urlencode選項以確保它們正確編碼。

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

也可以通過?/decrypt?使用反向操作(前提是服務器配置了對稱密鑰或完整密鑰對),如以下示例所示:

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

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

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

?/encrypt?和?/decrypt?端點也都接受?/*/{application}/{profiles}?形式的路徑,當客戶端調(diào)用主應用程序時,可用于按應用程序(名稱)和配置文件控制密碼。環(huán)境資源。

要以這種精細的方式控制密碼,您還必須提供類型為TextEncryptorLocator@Bean,以按名稱和配置文件創(chuàng)建不同的加密器。默認情況下不提供(所有加密使用相同的密鑰)。

?spring?命令行客戶端(安裝了Spring Cloud 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參數(shù)是強制性的(盡管前綴為--)。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號