AES 暗号化
フィールド | 説明 |
---|---|
plainTextPassword | プレーン テキストのパスワード。 |
algorithm | 以下のアルゴリズムから1つ選択します。
|
algorithmKey | アルゴリズム キーは上記で選択したアルゴリズムと一致している必要があります。
|
この情報を使用して、パスワードを暗号化するための適切な JSON を準備できます。次に例を示します。
{"plainTextPassword":"secret","algorithm":"AES/CBC/PKCS5PADDING","algorithmKey":"AES"}
以下の手順を実行するときは、この JSON を使用できるようにしておいてください。
ステップ 1. パスワードを暗号化する
データベースのパスワードを暗号化するときは、以下のテーブルに示すように、いくつかのオプションの引数を指定できます。
引数 | 説明 |
---|---|
| 暗号の正規クラス名。初期設定を使用するには空のままにします: |
| これらのオプションの引数を表示するヘルプ メッセージを出力します。 |
| 設定したパスワードに対して |
| 暗号化したいプレーンテキストのパスワード。このパラメーターを省略すると、コンソールからパスワードの入力を求められます。 |
| 最低限の情報をログに出力します。 |
データベースのパスワードを暗号化するには、以下の手順に従います。
<Confluence-installation-directory>/bin
に移動します。次のコマンドを実行してデータベース パスワードを暗号化します。また、上記のオプション パラメーターを使用することもできます。
java -cp "./*" com.atlassian.secrets.cli.db.DbCipherTool -c com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
パスワードの入力を求められたら、始める前にの情報に基づいて事前に準備された 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 に追加する
暗号化されたパスワードを追加するには、次の手順に従います。
<home-directory>/confluence.cfg.xml
ファイルをバックアップします。バックアップをインスタンスの外部の安全な場所に移動します。confluence.cfg.xm
l ファイルで、jdbc.password.decrypter.classname
プロパティを追加または変更して、次の内容を含めます。com.atlassian.secrets.store.algorithm.AlgorithmSecretStore
confluence.cfg.xml
ファイルのhibernate.connection.password
プロパティを追加または変更して、2 つのファイルへの完全修飾パスを含めます。{"sealedObjectFilePath":"/home/confluence/javax.crypto.SealedObject_1234567890","keyFilePath":"/home/confluence/javax.crypto.spec.SecretKeySpec_1234567890"}
更新が完了したら、
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>
- Confluence を再起動します。
ステップ 4 (オプション)。パスを環境変数として保存する
この手順は任意ですが、セキュリティを強化するために実行することをおすすめします。
生成されたファイルへのパスを環境変数として格納できます。パスが confluence.cfg.xml
ファイルに存在しない場合、Confluence は自動的に特定の環境変数でパスを検索します。この方法では、ファイル パスが confluence.cfg.xml
ファイルに格納されず、暗号化に使用されファイルを見つけることが困難になります。
生成されたファイルへのパスを環境変数として保存するには、次の手順に従います。
生成された 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
最初のステップの出力を編集し、パスワードを暗号化して、ファイルへのパスを削除します。
confluence.cfg.xml
ファイルは次のようになります。<property name="jdbc.password.decrypter.classname">com.atlassian.secrets.store.algorithm.AlgorithmSecretStore</property> <property name="hibernate.connection.password">{}</property>
Confluence を再起動します。
パスワードを復号化する
データベース パスワードを復号化する方法は以下のとおりです。
先ほど使用したコマンドを
-m decrypt
パラメータで拡張します。java -cp "./*" com.atlassian.secrets.cli.db.DbCipherTool -c com.atlassian.secrets.store.algorithm.AlgorithmSecretStore -m decrypt
パスワードを求められたら、
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 | 元のパスワードの暗号化に使用されたキーを含むファイルへのパス。例: ファイル パスを環境変数として保存した場合、このパラメータを省略できます。 |
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.