高度な暗号化

データベース パスワードの暗号化

このページの内容

お困りですか?

アトラシアン コミュニティをご利用ください。

コミュニティに質問

Confluence サイトのセキュリティを強化するために、confluence.cfg.xml ファイルに保存されているデータベース パスワードを暗号化できます。

この方法では、パスワードの暗号化に使用するアルゴリズムを選択できる AlgorithmCipher を使用します。

このページの内容

はじめる前に

JSON オブジェクトを準備する

JSON オブジェクトで、パスワードの暗号化に必要なすべての引数を指定する必要があります。以下の情報と例を参考に事前に準備しておきます。

フィールド説明

plainTextPassword

プレーン テキストのパスワード。

algorithm

以下のアルゴリズムから1つ選択します。

  • AES/CBC/PKCS5Padding

  • DES/CBC/PKCS5Padding

  • DESede/CBC/PKCS5Padding

algorithmKey

アルゴリズム キーは上記で選択したアルゴリズムと一致している必要があります。

  • AES

  • DES

  • DESede

サンプル JSON オブジェクトをご参照ください...
{"plainTextPassword":"yourPassword","algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES"}

JSON オブジェクトは 1 行で入力する必要があることにご注意ください。

ステップ 1. パスワードを暗号化する

データベース パスワードを暗号化するには、次の手順に従います。

  1. <install-directory>/bin に移動します。
  2. 次のコマンドを実行してパスワードを暗号化します。
     

    java -cp "./*" com.atlassian.db.config.password.tools.CipherTool -c com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher
    オプション引数...
    • -- silent -s: ログの記録を最小限に制限します。

    • -- help -h: すべてのパラメータを含むヘルプ メッセージを出力します

    • -- mode -m: パスワード処理方法を暗号化または 復号化として定義します。省略した場合は "encrypt" が使用されます

    • -- password -p: 必要な引数を持つ JSON オブジェクトです。省略すると、パスワードの入力を求められます。パスワードがターミナルの履歴に保存されないように、このパラメーターを省略することをお勧めします。

  3. コマンドを実行すると、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 で環境内のパスが検索されます。この方法では、ファイル パスがファイルに保存されず、暗号化に使用されたファイルを見つけることが困難になります。

生成されたファイルへのパスを環境変数として保存するには、次の手順に従います。

  1. 生成された 2 つのファイルを環境変数として保存します。AlgorithmCipher ではパスワードの復号化にアルゴリズム パラメーターは使用されないため、アルゴリズム パラメーターを含むファイルは追加不要です。Confluence インスタンスの起動に使用するスクリプトで、次の環境変数を正しい値に設定する必要があります。

    com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_spec_SecretKeySpec
    com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_SealedObject
  2. ステップ 1「パスワードを暗号化する」からの出力を編集して、ファイルへのパスを削除します。復号化クラスの名前とパスワードは次と一致する必要があります。

    <jdbc.password.decrypter.classname>=com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher
    <hibernate.connection.password>={}

ステップ 3. 暗号化されたパスワードを confluence.cfg.xml に追加する

暗号化されたパスワードを追加するには、次の手順に従います。

  1. <local-home>/confluence.cfg.xml ファイルをバックアップします。バックアップを安全な場所、理想的にはインスタンスの外部に移動します。
  2. 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>
  3. 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 ファイルから指定します。

環境変数を使用する際のサンプル JSON オブジェクト
{}
ファイルを使用する際のサンプル JSON オブジェクト
{"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

元のパスワードの暗号化に使用されたキーを含むファイルへのパス。例: javax.crypto.spec.SecretKeySpec_[timestamp]

ファイル パスを環境変数として保存した場合、このパラメータを省略できます。

algorithmParametersFilePath元のパスワードの暗号化に使用されたアルゴリズム パラメータを含むファイルへのパス。例: java.security.AlgorithmParameters_[timestamp]
すべてのフィールドを持つサンプル JSON オブジェクト...
{"plainTextPassword":"yourPassword", "algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES","algorithmParametersFilePath":"java.security.AlgorithmParameters_123456789","keyFilePath":"javax.crypto.spec.SecretKeySpec_123456789"}

JSON オブジェクトは 1 行で入力する必要があることにご注意ください。

パスワードを暗号化するには、ステップ 1「パスワードを暗号化する」のステップに従って、JSON オブジェクトをキーとアルゴリズムの各パラメーターと併用します。

トラブルシューティング

変更を元に戻す場合...

変更を元に戻すには、confluence.cfg.xmlファイルから <atlassian-password-cipher-provider> タグを削除し、暗号化されたパスワードをプレーン テキストのパスワードに変更します。

Confluence を再起動するとセットアップ画面が表示される...

セットアップ画面が表示される場合、Confluence はデータベースに接続して構成情報にアクセスできていません。ほとんどの場合、これはパスワードの復号化時のエラーが原因です。

この問題を解決するには、<home-directory>/logs/atlassian-confluence.log を開いて "Reading database configuration from" 以降の行を確認します。

以下のメッセージが表示される場合があります。

[c.a.c.config.database.DatabaseConfigHandler] Trying to get encrypted password from xml and decrypt it
[c.a.d.c.p.ciphers.algorithm.AlgorithmCipher] Runtime Exception thrown when decrypting:

この場合、エラーや使用できる可能性がある解決策についての詳細がメッセージに含まれているため、メッセージの内容をご確認ください。

エラーが欠落しているファイルに関連している場合は、環境変数に問題がある可能性があります。これらが削除されている、またはステージング環境から本番環境に変更した場合に利用できなくなっている可能性があります。これを確認するには、ファイル パスを confluence.cfg.xml ファイルの JSON オブジェクトに追加してみます。

"Bouncy Castle" エラーが表示される場合は、パスワードを再暗号化する必要があります。

Confluence の再起動後に "Confluence 起動時に問題が発生しました" メッセージが表示される...

この問題を調査するには、<home-directory>/logs/atlassian-confluence.log に移動して "Reading database configuration from" 以降の行を確認します。

以下のメッセージが表示される場合があります。

[c.a.c.config.database.DatabaseConfigHandler] Trying to get encrypted password from xml and decrypt it
[c.a.c.config.database.DatabaseConfigHandler] Database password decryption success!
[c.a.config.bootstrap.DefaultAtlassianBootstrapManager] Could not successfully test your database:

[c.a.c.health.HealthChecks] Confluence couldn't connect to your database
[c.a.c.health.HealthChecks] Confluence failed to establish a connection to your database.

これは、Confluence がパスワードを正常に復号化したが、パスワード自体が正しくないことを意味します。

これを確認するには、次の手順に従います。

  1. confluence.cfg.xml ファイルを開き、暗号化されたパスワードをコピーします。
  2. パスワードを復号化します。
  3. 復号化されたパスワードがバックアップの confluence.cfg.xml ファイルと同じかどうかを確認します。
最終更新日 2022 年 4 月 20 日

この内容はお役に立ちましたか?

はい
いいえ
この記事についてのフィードバックを送信する
Powered by Confluence and Scroll Viewport.