高度な暗号化
はじめる前に
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. 生成されたファイルを保護する
ツールによって生成されたファイルを安全な場所に移動します。これらを読み取り専用に変更して、Confluence を実行しているユーザーのみがアクセスできるようにします。Confluence をクラスターで実行している場合、ファイルはすべてのノードから同じパスを使用して利用できる必要があります。Confluence では、パスワードを復号化してデータベースに接続するために、これらのファイルにアクセスして読み取れる必要があります。
次のファイルが生成されます。
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 オブジェクトをキーとアルゴリズムの各パラメーターと併用します。