Spring Boot はプロパティ ファイルを使用しますが、少なくともデフォルトでは、パスワードはプレーン テキストです。何らかの方法でこれらを非表示/復号化することは可能ですか?
ベストアンサー1
使用できますジャシプトプロパティを暗号化すると、プロパティは次のようになります。
db.password=ENC(XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=)
Jasypt を使用すると、 内に配置した暗号化されたプロパティを取得したら、さまざまなアルゴリズムを使用してプロパティを暗号化できますENC(...)
。たとえば、ターミナルを使用して Jasypt で次のように暗号化できます。
encrypted-pwd$ java -cp ~/.m2/repository/org/jasypt/jasypt/1.9.2/jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input="contactspassword" password=supersecretz algorithm=PBEWithMD5AndDES
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 24.45-b08
----ARGUMENTS-------------------
algorithm: PBEWithMD5AndDES
input: contactspassword
password: supersecretz
----OUTPUT----------------------
XcBjfjDDjxeyFBoaEPhG14wEzc6Ja+Xx+hNPrJyQT88=
Spring Bootで簡単に設定するには、スターターを使用することができます。jasypt スプリングブートスターターグループID付きcom.github.ulisesbocchio
同じ方法でアプリケーションを起動する必要があることに注意してください。パスワードプロパティを暗号化するために使用しました。したがって、次のようにアプリを起動できます。
mvn -Djasypt.encryptor.password=supersecretz spring-boot:run
または、環境変数を使用します (Spring Boot のリラックス バインディングによる):
export JASYPT_ENCRYPTOR_PASSWORD=supersecretz
mvn spring-boot:run
詳細については、以下のリンクを確認してください。
https://www.north-47.com/knowledge-base/spring-boot-password-encryption-with-jasypt/
暗号化されたプロパティをアプリ内で使用するには、通常どおり、好きな方法を使用します (Spring Boot が魔法をかけますが、いずれにしてもプロパティはクラスパス内になければなりません)。
@Value
注釈の使用
@Value("${db.password}")
private String password;
またはEnvironment
@Autowired
private Environment environment;
public void doSomething(Environment env) {
System.out.println(env.getProperty("db.password"));
}
ps
更新: 実稼働環境では、 でプロセスを照会したり、 で以前のコマンドを実行したりできるため、コマンド ラインでパスワードが公開されるのを避けることhistory
ができます。次の操作を実行できます。
次のようなスクリプトを作成します。
touch setEnv.sh
変数
setEnv.sh
をエクスポートするには編集しますJASYPT_ENCRYPTOR_PASSWORD
#!/bin/bash
JASYPT_ENCRYPTOR_PASSWORD=supersecretz をエクスポートします
ファイルを実行する
. setEnv.sh
アプリをバックグラウンドで実行するには
mvn spring-boot:run &
ファイルを削除する
setEnv.sh
次のコマンドで以前の環境変数の設定を解除します。
unset JASYPT_ENCRYPTOR_PASSWORD