本番環境のデータベースのパスワードをgithubにアップロードするのは安全ではないため、暗号化の方法を検討しています この記事は最新バージョン3.0.3の紹介に基づいています
1. Maven の依存関係を導入する
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
</plugin>
2.application.yml を構成する
jasypt:
encryptor:
password: shenjian #盐值
3. プラグイン コマンドを使用して、暗号化された値を取得します。
mvn jasypt:encrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="root"
暗号化後の結果は、下の図からわかるように、3.0.3 はデフォルトで PBEWITHHMACSHA512ANDAES_256 暗号化アルゴリズムを使用します。
現在の結果を解読する
mvn jasypt:decrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM"
復号化された結果
復号化できるので、後で説明するソルト値へのアクセスがより重要になります。
4.暗号化されたデータベースを構成する
spring:
# Mysql数据源
datasource:
url: jdbc:mysql://127.0.0.1:3306/photo?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: ENC(CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM)
password: ENC(R5BPqaEh0oa+fgAqthW0eFTMuooFHEjOglQ8o38gvEFTiCtORllppbF+932zh5Zc)
driver-class-name: com.mysql.cj.jdbc.Driver
プロジェクトは springboot ベースであるため、スタートアップ クラスに @SpringBootApplication アノテーションがある限り
5. 起動パラメータにソルト値を追加
先ほど、暗号化された値は復号化できることがわかりましたので、設定ファイルにソルト値の設定が存在しません.application.yml のソルト値の設定を削除するには、起動パラメータの設定を使用するか、環境変数から取得します。次のように
方法 1: アイデアの開始時にパラメーターを追加する
--jasypt.encryptor.password=shenjian
方法 2: springboot の起動時にパラメーターを追加する
java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=shenjian
方法 3: Linux 環境変数からソルト値を取得する
# 进入环境变量设置文件
vim /etc/profile
# 在最后一行添加变量
export JASYPT_PASSWORD=shenjian
# 启动项目
java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=${JASYPT_PASSWORD}
6. よくある質問
1)原因: java.lang.SecurityException: ポリシーまたはフレームワーク ファイルが見つかりません!
分析: 3.0.3 で使用されているアルゴリズムは java8 のセキュリティ ポリシーに含まれていない可能性があるため、次のようにjce_policy-8を手動でダウンロードし、jar パッケージを ${JAVA_HOME}/jre/lib/security に配置する必要があります。下図:
公式アカウントのアルゴリズムのニッチに注目してください