AES 暗号化

このページの内容

お困りですか?

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

コミュニティに質問

この方法では、暗号化されたパスワードを設定ファイル内に保存する必要がないので、不正な第三者による検索や復号化が困難となってセキュリティが強化されます。

パスワードを暗号化する

この方法では、AlgorithmCipher を使用します。これにより、confluence.cfg.xml ファイル内のデータベース パスワードを暗号化するアルゴリズムを選択できます。

始める前に: JSON オブジェクトを準備する

JSON オブジェクトで、パスワードの暗号化に必要なすべての引数を指定する必要があります。以下の手順を開始する前に、次のテーブルの情報と例を参照してください。

On this page:

フィールド説明

plainTextPassword

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

algorithm

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

  • AES/CBC/PKCS5Padding

  • DES/CBC/PKCS5Padding

  • DESede/CBC/PKCS5Padding

algorithmKey

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

  • AES

  • DES

  • DESede

この情報を使用して、パスワードを暗号化するための適切な JSON を準備できます。次に例を示します。

{"plainTextPassword":"secret","algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES"}

以下の手順を実行するときは、この JSON を使用できるようにしておいてください。

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

データベースのパスワードを暗号化するときは、以下のテーブルに示すように、いくつかのオプションの引数を指定できます。

引数

説明

-c,--class <arg>

暗号の正規クラス名。初期設定を使用するには空のままにします: com.atlassian.secrets.store.base64.Base64SecretStore

-h,--help

これらのオプションの引数を表示するヘルプ メッセージを出力します。

-m,--mode <arg>

設定したパスワードに対して encrypt (既定) または decrypt を使用します。

-p,--password <arg>

暗号化したいプレーンテキストのパスワード。このパラメーターを省略すると、コンソールからパスワードの入力を求められます。

-s,--silent

最低限の情報をログに出力します。

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

  1. <Confluence-installation-directory>/bin に移動します。
  2. 次のコマンドを実行してデータベース パスワードを暗号化します。また、上記のオプション パラメーターを使用することもできます。

    java -cp "./*" com.atlassian.secrets.cli.db.DbCipherTool -c com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
  3. パスワードの入力を求められたら、始める前にの情報に基づいて事前に準備された JSON オブジェクトを入力します。
    JSON オブジェクトは 1 行で入力する必要があることにご注意ください。

    このコマンドが正常に実行されると、次のような出力が表示されます。


    2023-10-13 00:30:49,016 main INFO [com.atlassian.secrets.DefaultSecretStoreProvider] Initiating secret store class: com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
    2023-10-13 00:30:50,811 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Initiate AlgorithmCipher
    2023-10-13 00:30:50,891 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Encrypting data...
    2023-10-13 00:30:50,950 main DEBUG [store.algorithm.serialization.EnvironmentVarBasedConfiguration] Will try to read file path from environment variable under: com_atlassian_db_config_password_ciphers_algorithm_java_security_AlgorithmParameters
    2023-10-13 00:30:50,951 main DEBUG [store.algorithm.serialization.EnvironmentVarBasedConfiguration] Nothing found under environment variable.
    2023-10-13 00:30:51,093 main DEBUG [store.algorithm.serialization.UniqueFilePathGenerator] Will use generated name: java.security.AlgorithmParameters_1234567890
    2023-10-13 00:30:51,108 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Name of generated file with algorithm params used for encryption: java.security.AlgorithmParameters_1234567890
    2023-10-13 00:30:51,111 main DEBUG [store.algorithm.serialization.EnvironmentVarBasedConfiguration] Will try to read file path from environment variable under: com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_spec_SecretKeySpec
    2023-10-13 00:30:51,111 main DEBUG [store.algorithm.serialization.EnvironmentVarBasedConfiguration] Nothing found under environment variable.
    2023-10-13 00:30:51,220 main DEBUG [store.algorithm.serialization.UniqueFilePathGenerator] Will use generated name: javax.crypto.spec.SecretKeySpec_1234567890
    2023-10-13 00:30:51,245 main DEBUG [store.algorithm.serialization.SerializationFile] Saved file: javax.crypto.spec.SecretKeySpec_1234567890
    2023-10-13 00:30:51,353 main DEBUG [store.algorithm.serialization.UniqueFilePathGenerator] Will use generated name: javax.crypto.SealedObject_1234567890
    2023-10-13 00:30:51,357 main DEBUG [store.algorithm.serialization.SerializationFile] Saved file: javax.crypto.SealedObject_1234567890
    2023-10-13 00:30:51,369 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Encryption done.
    Success!
    For Jira, set the following properties in dbconfig.xml:
    
    <atlassian-password-cipher-provider>com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</atlassian-password-cipher-provider>
    <password>{"sealedObjectFilePath":"javax.crypto.SealedObject_1234567890","keyFilePath":"javax.crypto.spec.SecretKeySpec_1234567890"}</password>
    
    For Bitbucket, set the following properties in bitbucket.properties:
    
    jdbc.password.decrypter.classname=com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
    jdbc.password={"sealedObjectFilePath":"javax.crypto.SealedObject_1234567890","keyFilePath":"javax.crypto.spec.SecretKeySpec_1234567890"}
    
    For Bamboo, set the following properties in bamboo.cfg.xml:
    
    <property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property>
    <property name="hibernate.connection.password">{"sealedObjectFilePath":"javax.crypto.SealedObject_1234567890","keyFilePath":"javax.crypto.spec.SecretKeySpec_1234567890"}</property>
    
    For Confluence, set the following properties in confluence.cfg.xml:
    
    <property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property>
    <property name="hibernate.connection.password">{"sealedObjectFilePath":"javax.crypto.SealedObject_1234567890","keyFilePath":"javax.crypto.spec.SecretKeySpec_1234567890"}</property>

パスワードを暗号化すると暗号化ツールによって 3 つのファイルが生成され、後で confluence.cfg.xml ファイルに追加する出力 JSON オブジェクトが出力されます。次のステップでは、これらのファイルの保護方法について説明します。

ステップ 2. 生成されたファイルを保護する

パスワードを暗号化すると、3 つのファイルが生成されます。

  • javax.crypto.SealedObject_[timestamp]
    暗号化されたパスワードを含むファイル。

  • javax.crypto.spec.SecretKeySpec_[timestamp]
    パスワードの暗号化に使用されたキー。このファイルは、パスワードを復号化するために必要です。

  • java.security.AlgorithmParameters_[timestamp]
    パスワードの暗号化に使用されたアルゴリズム パラメーター。このファイルは、パスワードを再作成する場合にのみ必要になります。

Confluence をクラスターで実行している場合は、ファイルがすべてのノードで同じパスから利用できる必要があります。Confluence では、パスワードを復号化してデータベースに接続するために、これらのファイルにアクセスして読み取る必要があります。ツールによって生成されたファイルの権限を変更して、Confluence を実行しているユーザーに対して、ファイルが読み取り専用になるようにします。

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

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

  1. <home-directory>/confluence.cfg.xml ファイルをバックアップします。バックアップをインスタンスの外部の安全な場所に移動します。
  2. confluence.cfg.xml ファイルで、jdbc.password.decrypter.classname プロパティを追加または変更して、次の内容を含めます。

    com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
  3. confluence.cfg.xml ファイルの hibernate.connection.password プロパティを追加または変更して、2 つのファイルへの完全修飾パスを含めます。

    {"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}
  4. 更新が完了したら、confluence.cfg.xml に次の内容が含まれていることを確認してください。

    <property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property>
    <property name="hibernate.connection.password">{"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}</property>

    注意: Confluence を Windows で実行している場合は、JSON 解析エラーを回避するために、パスにバックスラッシュを使用しないでください。パスは次の例のようになります。

    <property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property>
    <property name="hibernate.connection.password">{"sealedObjectFilePath":"C:/confluence/javax.crypto.SealedObject_1234567890","keyFilePath":"C:/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}</property>
  5. Confluence を再起動します。

ステップ 4 (オプション)。パスを環境変数として保存する

この手順は任意ですが、セキュリティを強化するために実行することをおすすめします。

生成されたファイルへのパスを環境変数として格納できます。パスが confluence.cfg.xml ファイルに存在しない場合、Confluence は自動的に特定の環境変数でパスを検索します。この方法では、ファイル パスが confluence.cfg.xml ファイルに格納されず、暗号化に使用されファイルを見つけることが困難になります。

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

  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

      例:

      export com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_spec_SecretKeySpec=/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890
      export com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_SealedObject=/home/confluence/javax.crypto.SealedObject_1234567890
  2. 最初のステップの出力を編集し、パスワードを暗号化して、ファイルへのパスを削除します。
    confluence.cfg.xml ファイルは次のようになります。

    <property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property>
    <property name="hibernate.connection.password">{}</property>
  3. Confluence を再起動します。

パスワードを復号化する

データベース パスワードを復号化する方法は以下のとおりです。

  1. 先ほど使用したコマンドを -m decrypt パラメータで拡張します。

    java -cp "./*" com.atlassian.secrets.cli.db.DbCipherTool -c com.atlassian.secrets.store.algorithm.AlgorithmSecretStore -m decrypt
  2. パスワードを求められたら、confluence.cfg.xml ファイルから JSON オブジェクトを指定します。

    {"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}

    デコードが成功すると、次のようなメッセージが表示されます。

    2023-10-13 05:01:14,203 main INFO [com.atlassian.secrets.DefaultSecretStoreProvider] Initiating secret store class: com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
    2023-10-13 05:01:15,991 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Initiate AlgorithmCipher
    2023-10-13 05:01:16,068 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Decrypting data...
    2023-10-13 05:01:16,250 main DEBUG [secrets.store.algorithm.AlgorithmSecretStore] Decryption done.
    Success! Decrypted password using cipher provider: com.atlassian.secrets.store.algorithm.AlgorithmSecretStore decrypted password: secret

暗号化されたパスワードを再作成する

暗号化されたパスワードを紛失してプレーン テキスト パスワードを再暗号化した場合、新しく暗号化されたパスワードは異なって見えます。これは同じプレーン テキスト パスワードを引き続き表しているため、問題はありません。ただし、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":"secret","algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES","algorithmParametersFilePath":"/home/confluence/java.security.AlgorithmParameters_1234567890","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}

To encrypt the password, follow the steps in the first step, Encrypt the password, and use the JSON object with the key and algorithm parameters.

トラブルシューティング

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

変更を元に戻すには、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 ファイルと同じかどうかを確認します。
最終更新日 2024 年 9 月 10 日

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

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