Java:验证 jar 是否已签名

标签 java code-signing jarsigner

我正在使用 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 是否刚刚签名?

最佳答案

假设您只想知道一个 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 年,但我自己也在拼命寻找它,所以我想我也可以发布我的解决方案。

关于Java:验证 jar 是否已签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15616323/

相关文章:

keytool - 仅使用可信证书进行 jarsigner 验证?

java - Joda-Time 中解析两种时区格式的日期的模式

java - OKHttp 响应失败 : java. lang.IllegalStateException: 关闭

java - 如何从 strings.xml 中获取字符串值并将其放入 arraylist [android]

java - 双重签名.apk//SHA1 及其他问题

java - 未知发布者小程序浏览器,签名 jar

java - 更改ViewPager中Fragment的文本

Java 小程序声音问题,声音在关闭时继续,我无法签署声音文件

android - 在已签名的应用程序中看不到 Google map

blackberry - 可以使用一个黑莓签名 key 对多个程序进行签名吗?