2

リソースとして war ファイルからロードしている JCEKS キーストアがあります。キーストアを使用して、AES 暗号化の秘密鍵を保存しています。ファイルを直接開く定型プロジェクトでキーストアから読み取ろうとすると、キーストアは正常に機能します。ただし、リソースとしてキーストアにアクセスすると、次の例外が発生します。

java.io.IOException: Keystore was tampered with, or password was incorrect
    at com.sun.crypto.provider.JceKeyStore.engineLoad(DashoA13*..)
    at java.security.KeyStore.load(KeyStore.java:1185)

少しグーグルを行った後、使用しているパスワードが間違っていると思われますが、それらが正しいことを確認した後でもエラーが発生します。ここで、キーストア データを読み込もうとしています。

public class AegisDataStoreFactory {
    ...
    static {
        InputStream in = null;
        try{
            final Configuration conf = Configuration.getConfiguration();
            final KeyStore ks = KeyStore.getInstance("JCEKS");
            in = AegisDataStoreFactory.class.getResourceAsStream(KEYSTORE);
            final String password = conf.getProp("keyStorePassword").trim();
            ks.load(in, password.toCharArray());
            ...
        } finally {
            if(in != null) {
                in.close();
            }
        }
    }
    ...
}

プログラムはロード時に IOException で失敗します。私はここで途方に暮れています。戦争中にロードしていないときは問題なく動作します。私は Maven を使用して war ファイルを生成しています。

何かご意見は?

編集:何が起こっているのか理解しました。ビルドに Maven を使用し、ビルド中にリソース ファイルのフィルタリングを有効にしました。この時点まで、リソース ディレクトリにバイナリ ファイルはありませんでした (フィルタリングを有効にしたいいくつかのプロパティ ファイルしかありませんでした)。キーストアをフィルタリングから除外しても、キーストアが移動されたことを確認すると、機能しました。

4

1 に答える 1

1

私は何が起こっているのかを理解しました。ビルドに Maven を使用し、ビルド中にリソース ファイルのフィルタリングを有効にしました。この時点まで、リソース ディレクトリにバイナリ ファイルはありませんでした (フィルタリングを有効にしたいいくつかのプロパティ ファイルしかありませんでした)。キーストアをフィルタリングから除外しても、キーストアが移動されたことを確認すると、機能しました。ここに私の最初のpomファイルがあります:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

これが私がpomファイルを更新したものです。(私のキーストアのファイル拡張子は .ks です)

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
            <exclude>**/*.ks</exclude>
        </excludes>
    </resource>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>false</filtering>
        <includes>
            <include>**/*.ks</include>
        </includes>
    </resource>
</resources>
于 2012-04-17T03:31:35.547 に答える