第4章 Spring Boot で暗号化されたプロパティープレースホルダーを使用する方法

コンテナーを保護する場合、設定ファイルでプレーンテキストのパスワードを使用することはお勧めしません。プレインテキストのパスワードの使用を回避する 1 つの方法は、可能な限り暗号化されたプロパティープレースホルダーを使用することです。

4.1. 値を暗号化するためのマスターパスワード

Jasypt を使用して値を暗号化するには、マスターパスワードが必要です。マスターパスワードは、ユーザー自身または管理者が選択できます。Jasypt では、いくつかの方法でマスターパスワードを設定できます。Jasypt は Spring 設定フレームワークに統合できるため、設定ファイルがロードされるときにプロパティー値が復号化されます。1 つの方法は、Spring Boot 設定でマスターパスワードをプレーンテキストで指定することです。

Spring は PropertyPlaceholder フレームワークを使用して、トークンをプロパティーファイルからの値に置き換え、Jasypt のアプローチは PropertyPlaceholderConfigurer クラスを、暗号化された文字列を認識し、それを復号化するものに置き換えます。

<bean id="propertyPlaceholderConfigurer"
      class="org.jasypt.spring.properties.EncryptablePropertyPlaceholderConfigurer">
  <constructor-arg ref="configurationEncryptor" />
  <property name="location" value="/WEB-INF/application.properties" />
</bean>

<bean id="configurationEncryptor" class="org.jasypt.encryption.pbe.StandardPBEStringEncryptor">
  <property name="config" ref="environmentVariablesConfiguration" />
</bean>

<bean id="environmentVariablesConfiguration"
      class="org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig">
  <property name="algorithm" value="PBEWithMD5AndDES" />
  <property name="password" value="myPassword" />
</bean>

マスターパスワードをプレーンテキストで指定する代わりに、環境変数を使用してマスターパスワードを設定できます。Spring Boot 設定ファイルで、この環境変数を passwordEnvName プロパティーの値として指定します。たとえば、MASTER_PW 環境変数をマスターパスワードに設定すると、Spring Boot 設定ファイルにこのエントリーが作成されます。

<property name="passwordEnvName" value="MASTER_PW">