3

私はJarsignerと協力しています。指定されたjarが署名されているかどうかを確認したい。ユーザーがjarファイルをアップロードした場合、jarファイルが署名されているかどうかを確認したい. 以下のコードを試してみました ( http://docs.oracle.com/javase/6/docs/technotes/guides/security/crypto/HowToImplAProvider.html#integritycheck )

    // Ensure the jar file is signed.
    Manifest man = jarFile.getManifest();
    if (man == null) {
        throw new SecurityException("The provider is not signed");
    } 

しかし、署名されていないjarを提供しても、manオブジェクトはnullではなく、この例外はスローされません。指定されたjarが署名されているかどうかを確認するにはどうすればよいですか?

4

2 に答える 2

0

jar が署名されているかどうかを (署名自体を検証せずに) 知りたいだけであると仮定すると、このスニペットは機能するはずです。

  boolean isJarSigned(JarFile jarFile) {
    try {
      final Manifest man = jarFile.getManifest();
      if (man == null)
        return false;

      // getEntries will contain all signed files
      return !man.getEntries().isEmpty();
    } catch (Throwable t) {
      t.printStackTrace();

      return false;
    } finally {
      // Make sure the jarFile gets always closed
      try {
        if (jarFile != null)
          jarFile.close();
      } catch (IOException e) {
        e.printStackTrace();
      }
    }
  }

ところで、私はその答えに3年遅れていることを知っていますが、私は必死に自分でそれを探していたので、自分の解決策を投稿するだけでよいと思いました.

于 2016-07-05T09:26:15.020 に答える
0

引用したページの途中で停止しました。署名が検証される部分を見逃しました。

于 2016-07-05T09:41:01.303 に答える