java - jarsigner -verify 适用于 Java 6 但不适用于 Java 7

标签 java keytool jarsigner

我已经为此苦苦思索了几天,完全被难住了。这是纲要:

  1. 我有一个使用 Tycho 通过 Maven 3 构建的 Eclipse 插件项目
  2. 在 Maven 中,我设置了 maven-jarsigner-plugin 以使用我的 keystore 对 jar 进行签名(有关 keystore 的详细信息,请参见下文)
  3. 我的 keystore 中有一个由 Thawte 签名的代码签名证书

我可以从 target/* 中获取任何签名的 jar 文件并在其上运行“jarsigner -verify”。这是发生了什么:

#java 6 on a VM
vagrant@test2:/vagrant/com.example.plugins.eclipse/target$ jarsigner -verify com.example.eclipse-0.1.3-SNAPSHOT.jar
jar verified.

下一步:

#java 7 on a completely different vm
vagrant@test1:/vagrant$ jarsigner -verify com.example.eclipse-0.1.3-SNAPSHOT.jar
jar verified.

Warning:
This jar contains entries whose certificate chain is not validated.

Re-run with the -verbose and -certs options for more details.

我注意不要使用同时安装了 Java6 和 Java7 的机器,所以它不是 this issue

我也不相信它是基于算法的,如 this issue 中所述,因为我可以使用 Java 6 或 Java 7 对项目进行签名,并且它总是在 Java6 中进行验证,而从不在 Java7 中进行验证,无论我使用哪个环境对 jar 进行签名。

这是 keytool -list 的输出

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 3 entries

root, Aug 11, 2013, trustedCertEntry,
Certificate fingerprint (SHA1): 91:C6:D6:EE:3E:8A:C8:63:84:E5:48:C2:99:29:5C:75:6C:81:7B:81
intermediate, Aug 11, 2013, trustedCertEntry,

我不得不相信这是一个证书链问题,因为我能够在 Java 7 上使用以下命令验证 jar:

jarsigner -verify -keystore keystore com.example.eclipse-0.1.3-SNAPSHOT.jar

显然我不能让我的插件的每个用户都使用我的 keystore 文件,所以这不是解决方案。但是,它确实强化了我在 Java 7 中存在证书链问题。有什么想法?

最佳答案

您的问题的答案是您使用 SUN 作为您的 keystore 提供程序 java 6 是在 oracle 购买 SUN 之前发布的,java 7 是在 oracle 购买 SUN 之前发布的,并且许多 Sun 软件包现在已被弃用。你可以验证这个 here .

Oracle 一直支持已弃用的 SUN keystore 提供程序,但现在要求发出警告,就像您使用了任何已弃用的功能一样。

Oracle 在 JCA Documentation 中详细描述了为什么您不应该使用 SUN 提供程序进行安全签名在他们的网站上。

唯一“解决”这个问题的方法是将您的 keystore 提供程序更改为 oracle 可接受的提供程序,您可以在上面链接的相同安全文档中找到它们。

希望对您有所帮助。

关于java - jarsigner -verify 适用于 Java 6 但不适用于 Java 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18281129/

相关文章:

java - keytool错误: java. io.IOException: keystore 密码不正确

jmeter - 如何将客户端证书与jmeter集成

java - 比较两个相同来源的 BCRYPTed 密码

java - struts 资源包属性文件未映射某些键

java - 无法从 keytool 在 JVM 中导入证书

android - 检查 android keystore keypass 的正确性

java - : "jarsigner: attempt to rename {file} to {file}.org failed" when signing jars with ant?失败是什么原因

java - 已签名的 jar 文件在 java 1.7.0_76 中可识别,但在 java 1.7.0_75 中无法识别

java - Spring Integration 和 JAXB 范围

java - 找不到类 Java JUnit