3

次のコマンドで生成されたキーペアを持つキーストアがあります。

keytool -genkeypair -v -alias test-agent -keypass test-agent -storepass 123456.ABC -keystore test-agent.keystore -storetype JKS

要求された証明書の情報を入力すると、キーペアのあるストアが正しく生成されます。

次のコマンド:

keytool -list -keystore test-agent.keystore -storepass 123456.ABC -storetype JKS

戻り値:

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

test-agent, Jul 13, 2012, PrivateKeyEntry, 
Certificate fingerprint (MD5): 7B:8F:D7:25:FF:34:D0:EF:44:87:46:E5:BF:18:C6:BF

次に、キーストアファイルをビルドパスに追加し、OSXLionで実行されている次のJavaコードを使用してロードしようとします。

public void loadKeyStore() {
  try {
    final Provider p = Security.getProvider("SUN"); 
    final KeyStore keystore = KeyStore.getInstance("JKS",p);

    final InputStream keyStoreInStream = this.getClass().getClassLoader().getResourceAsStream("test-agent.keystore");
    if ( keyStoreInStream == null ) throw new RuntimeException("No keystore found!");

    final char[] password = "123456.ABC".toCharArray();
    try {
      keystore.load(keyStoreInStream, password);
    } catch (Exception e) {
      log.error(String.format("Security library error! [%s]",e.getCause()),e);
    }
  } catch (KeyStoreException e) {
    log.error("Can't initialize security library!",e);
  }
}

次の例外がスローされます。

java.io.IOException: Invalid keystore format
at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:633)
at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:38)
at java.security.KeyStore.load(KeyStore.java:1185)

私はすでにPKCS12(keytoolとコードの両方に設定されています。この場合のプロバイダーはSunJSSEである必要があります)を使用しようとしましたが、別の例外が発生します。

java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
at sun.security.util.DerInputStream.getLength(DerInputStream.java:544)
at sun.security.util.DerValue.init(DerValue.java:347)
at sun.security.util.DerValue.<init>(DerValue.java:303)
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1200)
at java.security.KeyStore.load(KeyStore.java:1185)

何が問題なのかわかりません。誰かが私にヒントを与えることができますか?

4

2 に答える 2

12

私は解決策を見つけました。それは実際、私のプロジェクトの展開に問題がありました。私はmavenを使用しており、そのリソースプラグインはUTF8を使用してリソースフォルダー内のすべてのファイルをエンコードします。このエンコーディングにより、キーストアが破損しました。解決策は、pomファイルに無視フィルターオプションを追加し、キーストアファイルをエンコードしないようにmavenに指示することです。

于 2012-08-11T09:31:35.260 に答える
10

以下をpom.xmlに追加します

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <version>2.6</version>
  <configuration>
    <!-- specify UTF-8, ISO-8859-1 or any other file encoding -->
    <encoding>UTF-8</encoding>
    <nonFilteredFileExtensions>
      <nonFilteredFileExtension>p12</nonFilteredFileExtension>
    </nonFilteredFileExtensions>
  </configuration>
</plugin>
于 2013-10-29T02:57:12.167 に答える