高度な暗号化

このページの内容

お困りですか?

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

コミュニティに質問

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

パスワードを暗号化する

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

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

JSON オブジェクトで、パスワードの暗号化に必要なすべての引数を指定します。以下の情報と例を使用して事前に用意しておきます。

フィールド説明
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. <Jira-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 つのファイルが生成され、後で dbconfig.xml ファイルに追加する出力 JSON オブジェクトが出力されます。次のステップでは、これらのファイルの保護方法について説明します。

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

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

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

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

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

Jira をクラスターで実行している場合、ファイルはすべてのノードから同じパスで利用できる必要があります。パスワードを復号化してデータベースに接続するためには、Jira がこれらのファイルへのアクセスと読み取りを実行できる必要があります。

  1. ツールによって生成されたファイルを安全な場所に移動します。 

  2. ファイルを読み取り専用に変更して、Jira を実行しているユーザーのみがアクセスできるようにします。 


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

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

  1. <home-directory>/dbconfig.xml ファイルをバックアップします。バックアップをインスタンスの外部の安全な場所に移動します。

  2. dbconfig.xml ファイルで、次の内容を含むように <atlassian-password-cipher-provider> プロパティを追加または変更します。

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

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

    <atlassian-password-cipher-provider>com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</atlassian-password-cipher-provider>
    <password>{"sealedObjectFilePath":"/home/jira/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/jira/javax.crypto.spec.SecretKeySpec_1234567890"}</password>

    WINDOWS Windows で Jira を実行している場合は、JSON のパース エラーを回避するために、ファイル パスをエスケープして、パスを囲む二重引用符(”)を一重引用符(’)に変更する必要があります。パスは次の例のようになります。

    <atlassian-password-cipher-provider>com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</atlassian-password-cipher-provider>
    <password>{"sealedObjectFilePath":'C:\\jira\\javax.crypto.SealedObject_1234567890',"keyFilePath":"'C:\\jira\\javax.crypto.spec.SecretKeySpec_1234567890'"}</password>
  5. Jira を再起動します。

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

tip/resting Created with Sketch.

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

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

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

  1. 生成された 2 つのファイルを環境変数として保存します。AlgorithmCipher ではパスワードの復号化にアルゴリズム パラメーターが使用されないため、アルゴリズム パラメーターを含むファイルを追加する必要はありません。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_1234567890
    export com_atlassian_db_config_password_ciphers_algorithm_javax_crypto_SealedObject=/home/jira/javax.crypto.SealedObject_1234567890
  2. ステップ 1 の「パスワードを暗号化する」での出力を編集して、ファイルへのパスを削除します。confluence.cfg.xml ファイルは次のようになるはずです。

    <atlassian-password-cipher-provider>com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</atlassian-password-cipher-provider>
    <password>{}</password>
  3. Jira を再起動します。

パスワードの復号化

機密データを復号化する方法。

  1. -m decrypt パラメーターでコマンドを拡張します。

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

    {"sealedObjectFilePath":"/home/jira/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/jira/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

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

暗号化されたパスワードを紛失して、プレーン テキスト パスワードを再暗号化しようとしている場合、新しく暗号化されたパスワードは異なって見えます。これは同じプレーン テキスト パスワードを引き続き表しているため、問題はありません。ただし、Jira インスタンスが別のサーバーに移行される際に同じ暗号化されたパスワードを使用するなど、一部のケースでは一貫性を保つことをおすすめします。

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

  • キー: 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":"secret","algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES","algorithmParametersFilePath":"/home/jira/java.security.AlgorithmParameters_1234567890","keyFilePath":"/home/jira/javax.crypto.spec.SecretKeySpec_1234567890"}

パスワードを暗号化するには、ステップ 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 ファイルと同じかどうかを確認します。
最終更新日 2023 年 11 月 10 日

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

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