我已经为此苦苦思索了几天,完全被难住了。这是纲要:
- 我有一个使用 Tycho 通过 Maven 3 构建的 Eclipse 插件项目
- 在 Maven 中,我设置了 maven-jarsigner-plugin 以使用我的 keystore 对 jar 进行签名(有关 keystore 的详细信息,请参见下文)
- 我的 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/