AES 暗号化
はじめる前に
JSON オブジェクトを準備する
JSON オブジェクトで、パスワードの暗号化に必要なすべての引数を指定する必要があります。以下の情報と例を参考に事前に準備しておきます。
フィールド | 説明 |
---|---|
plainTextPassword | プレーン テキストのパスワード。 |
algorithm | 以下のアルゴリズムから1つ選択します。
|
algorithmKey | アルゴリズム キーは上記で選択したアルゴリズムと一致している必要があります。
|
ステップ 1. パスワードを暗号化する
データベース パスワードを暗号化するには、次の手順に従います。
<install-directory>/bin
に移動します。次のコマンドを実行してパスワードを暗号化します。
java -cp "./*" com.atlassian.db.config.password.tools.CipherTool -c com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher
- コマンドを実行すると、JSON オブジェクトに必要な引数を 1 行で指定するように求められます。
パスワードを暗号化すると暗号化ツールによって 3 つのファイルが生成され、後で confluence.cfg.xml
ファイルに追加する出力 JSON オブジェクトが出力されます。次のステップでは、これらのファイルの保護方法について説明します。
ステップ 2. 生成されたファイルを保護する
Change the permissions on the files generated by the tool so that they are read-only to the user running Confluence. If you're running Confluence in a cluster, the files should be available to all nodes via the same path. Confluence needs to be able to access and read those files to decrypt your password and connect to the database.
次のファイルが生成されます。
javax.crypto.SealedObject_[timestamp]
暗号化されたパスワードを含むファイル。javax.crypto.spec.SecretKeySpec_[timestamp]
パスワードの暗号化に使用されたキー。このファイルは、パスワードを復号化するために必要です。java.security.AlgorithmParameters_[timestamp]
パスワードの暗号化に使用されたアルゴリズム パラメーター。このファイルは、パスワードを再作成する場合にのみ必要になります。
パスを環境変数として保存する
このステップはオプションです。
生成されたファイルへのパスを環境変数として保存できます。パスが confluence.cfg.xml
ファイルに存在せず、hibernate.connection.password
が空の JSON オブジェクト ({})
である場合は、 AlgorithmCipher
で環境内のパスが検索されます。この方法では、ファイル パスがファイルに保存されず、暗号化に使用されたファイルを見つけることが困難になります。
生成されたファイルへのパスを環境変数として保存するには、次の手順に従います。
生成された 2 つのファイルを環境変数として保存します。
AlgorithmCipher
ではパスワードの復号化にアルゴリズム パラメーターは使用されないため、アルゴリズム パラメーターを含むファイルは追加不要です。Confluence インスタンスの起動に使用するスクリプトで、次の環境変数を正しい値に設定する必要があります。com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_spec_SecretKeySpec com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_SealedObject
ステップ 1「パスワードを暗号化する」からの出力を編集して、ファイルへのパスを削除します。復号化クラスの名前とパスワードは次と一致する必要があります。
<jdbc.password.decrypter.classname>=com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher <hibernate.connection.password>={}
ステップ 3. 暗号化されたパスワードを confluence.cfg.xml に追加する
暗号化されたパスワードを追加するには、次の手順に従います。
<local-home>/confluence.cfg.xml
ファイルをバックアップします。バックアップを安全な場所、理想的にはインスタンスの外部に移動します。confluence.cfg.xm
ファイルで、hibernate.connection.password プロパティを出力 JSON オブジェクトに置き換えます。環境変数を使用しているかどうかに応じて、JSON オブジェクトを次のいずれかの例に調整します。
ファイル パスを環境変数として保存している場合は、出力からパスを削除します。プロパティは次のようになります。環境変数を使用している場合<property name="jdbc.password.decrypter.classname">com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</property> <property name="hibernate.connection.password">{}</property>
環境変数を使用しておらず、
confluence.cfg.xml
ファイルのファイル パスを使用し続ける場合は、ファイルを安全な場所に移動した後で必ずパスを更新します。プロパティは次のようになります。環境変数を使用していない場合<property name="jdbc.password.decrypter.classname">com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</property> <property name="hibernate.connection.password">{"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_123456789","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_123456789"}</property>
Confluence を Windows で実行している場合は、JSON 解析エラーを回避するために、パスにバックスラッシュを使用しないでください。パスは次の例のようになります。
Windows を使用している場合<property name="jdbc.password.decrypter.classname">com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</property> <property name="hibernate.connection.password">{"sealedObjectFilePath":"C:/confluence/javax.crypto.SealedObject_123456789","keyFilePath":"C:/confluence/javax.crypto.spec.SecretKeySpec_123456789"}</property>
- Confluence を再起動します。
パスワードを復号化する
暗号化されたパスワードを復号化するには、前に使用したコマンドを -m decrypt
パラメーターで拡張します。
java -cp "./*" com.atlassian.db.config.password.tools.CipherTool -c com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher -m decrypt
パスワードを求められたら、JSON オブジェクトを confluence.cfg.xml
ファイルから指定します。
{}
{"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_123456789","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_123456789"}
暗号化されたパスワードを再作成する
暗号化されたパスワードを紛失してプレーン テキスト パスワードを再暗号化した場合、新しく暗号化されたパスワードは異なって見えます。これは同じプレーン テキスト パスワードを引き続き表しているため、問題はありません。ただし、Confluence インスタンスが別のサーバーに移行される際に同じ暗号化されたパスワードを使用するなど、一貫性を保つことをお勧めする場合もあります。
以前とまったく同じ方法でパスワードを暗号化するには、元のパスワードの暗号化に使用したキーとアルゴリズム パラメータが必要です。いずれもも暗号化ツールによって生成され、以下のファイルに保存されています。
- キー -
javax.crypto.spec.SecretKeySpec_[timestamp]
- アルゴリズム パラメーター -
java.security.AlgorithmParameters_[timestamp]
これらのファイルを見つけたら、JSON オブジェクトにある 2 つの追加フィールドによって暗号化ツールにその場所を指し示せます。
フィールド | 説明 |
---|---|
keyFilePath | 元のパスワードの暗号化に使用されたキーを含むファイルへのパス。例: ファイル パスを環境変数として保存した場合、このパラメータを省略できます。 |
algorithmParametersFilePath | 元のパスワードの暗号化に使用されたアルゴリズム パラメータを含むファイルへのパス。例: java.security.AlgorithmParameters_[timestamp] 。 |
パスワードを暗号化するには、ステップ 1「パスワードを暗号化する」のステップに従って、JSON オブジェクトをキーとアルゴリズムの各パラメーターと併用します。