几天来我一直在努力解决这个问题,我完全被难住了。这是纲要:
- 我有一个使用 Tycho 通过 Maven 3 构建的 Eclipse 插件项目
- 在 Maven 中,我设置了 maven-jarsigner-plugin 以使用我的密钥库对 jar 进行签名(有关密钥库的详细信息,请参见下文)
- 我的密钥库中有 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 的机器,所以不是这个问题
我也不相信它是基于算法的,如本期所述,因为我可以使用 Java 6 或 Java 7 对项目进行签名,并且它总是在 Java6 中验证,从不在 Java7 中验证,无论我用哪种环境签署了 jars .
这是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
显然,我不能让插件的每个用户都使用我的密钥库文件,所以这不是一个解决方案。但是,它确实强化了我在 Java 7 中存在证书链问题。想法?