AES 暗号化

データベースのパスワードを保護する

このページの内容

お困りですか?

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

コミュニティに質問

この方法では、パスワードの暗号化に使用するアルゴリズムを選択できる 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"}

ステップ 1: パスワードの暗号化

  1. <Jira-installation-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: パスワードの処理方法を暗号化または 復号化に定義します。省略した場合は "暗号化" が使用されます。
    • -- password -p: 必要な引数を持つ JSON オブジェクト。省略した場合、入力を求められます。パスワードが履歴に保存されないように、このパラメータを省略することをおすすめします。
  3. コマンドを実行すると、JSON オブジェクトに必要な引数を指定するように求められます。「始める前に」に記載されている手順に基づいて準備します。

暗号化ツールによって、パスワードの暗号化に使用された 3 つのファイルが生成され、後に dbconfig.xml ファイルに追加する出力 JSON オブジェクトが出力されました。

ステップ 2: 生成されたファイルの保護

ツールによって生成されたファイルを安全な場所に移動し、読み取り専用に変更します。Jira では、パスワードを復号化してデータベースに接続するために、これらにアクセスして読み取ることができる必要があります。

次のファイルが生成されています。

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

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

  • java.security.AlgorithmParameters_[timestamp]
    Algorithm parameters used to encrypt your password. You will need this file only if you wanted to recreate an encrypted password

Change the permissions on the files generated by the tool so that they are `read-only` to the user running Jira.

ステップ 3: (オプション) ファイル パスを環境変数として格納

tip/resting Created with Sketch.

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

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

  1. 生成されたファイルの 2 つを環境変数として格納します。Jira ではパスワードの復号化にアルゴリズム パラメータは使用しないため、アルゴリズム パラメータのファイルを追加する必要はありません。以下の環境変数を使用する必要があります。

    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/jira/javax.crypto.spec.SecretKeySpec_123456789
    export com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_SealedObject=/home/jira/javax.crypto.SealedObject_123456789
  2. ステップ 1: パスワードの暗号化からの出力を編集し、ファイルへのパスを削除します。最終的な出力は以下の JSON オブジェクトに似たものになります。

    <atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</atlassian-password-cipher-provider>
    <password>{}</password>

ステップ 4: 暗号化されたパスワードを dbconfig.xml に追加

出力された JSON オブジェクトを dbconfig.xml ファイルに追加し、現在のパスワードを置き換えます。

  1. Jira ホーム ディレクトリに移動し、dbconfig.xml ファイルをバックアップします。Jira サーバーの外部の安全な場所にバックアップを移動します。
  2. dbconfig.xml ファイルを編集します。
  3. <password> タグを出力された JSON オブジェクトに置き換えます。環境変数を使用したかどうかに応じて、JSON オブジェクトを以下のいずれかの例に合わせます。

    • ファイル パスを環境変数として保存した場合、出力からパスを削除します。以下の例のようになります。

      <atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</atlassian-password-cipher-provider>
      <password>{}</password>
    • 環境変数を使用せずに dbconfig.xml ファイルのファイル パスを使用する場合、ファイルを安全な場所に移動した後で更新していることを確認します。出力は次の例のようになります。 

      <atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</atlassian-password-cipher-provider>
      <password>{"sealedObjectFilePath":"/home/jira/javax.crypto.SealedObject_123456789","keyFilePath":"/home/jira/javax.crypto.spec.SecretKeySpec_123456789"}</password>
    • WINDOWS JSON のパース エラーを回避するには、ファイル パスをエスケープし、パスを囲む二重引用符 (”) を一重引用符 (’) に変更する必要があります。パスは以下の例のようになります。

      <atlassian-password-cipher-provider>com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher</atlassian-password-cipher-provider>
      <password>{"sealedObjectFilePath":'C:\\jira\\javax.crypto.SealedObject_123456789',"keyFilePath":"'C:\\jira\\javax.crypto.spec.SecretKeySpec_123456789'"}</password>
  4. Jira を再起動します。

パスワードの復号化

パスワードを復号化するには、-m decrypt パラメータを使用してコマンドを拡張します。

java -cp "./*" com.atlassian.db.config.password.tools.CipherTool -c com.atlassian.db.config.password.ciphers.algorithm.AlgorithmCipher -m decrypt

JSON オブジェクトを求められたら、dbconfig.xml ファイルのいずれかのオブジェクトを指定します。

ファイル パスを使用する際のサンプル JSON オブジェクト
{"sealedObjectFilePath":"/home/jira/javax.crypto.SealedObject_123456789","keyFilePath":"/home/jira/javax.crypto.spec.SecretKeySpec_123456789"}
環境変数を使用する際のサンプル JSON オブジェクト
{}

暗号化されたパスワードの再作成

暗号化したパスワードを紛失してプレーン テキスト パスワードを再暗号化した場合、新たに暗号化されたパスワードは元のパスワードと外観が異なります。これは引き続き同じプレーン テキスト パスワードを表しているため、問題はありません。ただし、暗号化されたパスワードをすべての Jira Data Centerノードに格納するなど、一貫性を維持したい要件がある場合があります。

以前とまったく同じ方法でパスワードを暗号化するには、元のパスワードの暗号化に使用したキーとアルゴリズム パラメータが必要です。いずれもも暗号化ツールによって生成され、以下のファイルに保存されています。

  • キー: javax.crypto.spec.SecretKeySpec_[timestamp]
  • アルゴリズム パラメータ: java.security.AlgorithmParameters_[timestamp]

これらのファイルを見つけたら、JSON オブジェクトで 2 つの追加フィールドを使用して暗号化ツールでその場所を指すことができます。これらのフィールドの説明とサンプル JSON オブジェクトは次のとおりです。

フィールド説明

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"}

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

トラブルシューティング

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

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

Jira の再起動後にセットアップ画面が開く...

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

この問題を解決するには、<Jira_home_directory>/log/atlassian-jira.log を開いて、Reading database configuration from に続く行を確認します。

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

[c.a.j.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: 

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

  • エラーが欠落しているファイルに関連している場合、環境変数に問題がある可能性があります。これらが削除されたり、ステージング環境から本番環境に変更した場合に使用できなくなったりした可能性があります。これを確認するには、dbconfig.xmlファイルの JSON オブジェクトにファイル パスを追加してみます。
  • Bouncy Castle エラーが表示される場合、パスワードを再度暗号化する必要があります。
Jira の再起動後に "Jira had problems starting up" メッセージが開く...

この問題を調べるには、<Jira_home_directory>/log/atlassian-Jira.log を開き、Reading database configuration from に続く行を確認します。

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

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

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

これは、Jira がパスワードを正常に復号化したが、パスワード自体が正しくないことを意味します。これは次の手順で確認できます。

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

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

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