Jas*_*ols 5 java keytool jarsigner
几天来,我一直在抨击我的头,我完全被难倒了.这是破败的:
我可以从目标/*获取任何已签名的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.
Run Code Online (Sandbox Code Playgroud)
下一个:
#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.
Run Code Online (Sandbox Code Playgroud)
我注意不要使用安装了Java6和Java7的机器,因此不是这个问题
我也不相信它是基于算法的,如本期所述,因为我可以使用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,
Run Code Online (Sandbox Code Playgroud)
我不得不相信这是证书链问题,因为我能够在Java 7上使用以下命令验证jar:
jarsigner -verify -keystore keystore com.example.eclipse-0.1.3-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
显然我不能使用我的密钥库文件让我的插件的每个用户,所以这不是一个解决方案.但是,它强调我在Java 7中有一个证书链问题.思想?
几个月后,我碰巧找到了自己问题的答案。对于遇到同样问题的其他人,这就是我所做的:
将现有的私钥和 CA 签名的证书转换为 pkcs12 格式(这是必需的,因为 Java 的 keytool 不允许直接导入这些项目)。这可以通过单个 openssl 命令来完成:
openssl pkcs12 -export -name signing -in signing.cert -inkey myPrivateKey.key -out keystore.p12
Run Code Online (Sandbox Code Playgroud)
其中,signing 是我的 pkcs12 密钥库的名称,signing.cert 是我的 CA 提供的签名证书,(显然)myPrivateKey.key 是我用于签署证书请求的私钥。
将这个新创建的密钥库导入到 Java 密钥库中:
keytool -importkeystore -destkeystore keystore -srckeystore keystore.p12 -srcstoretype pkcs12 -alias signing
Run Code Online (Sandbox Code Playgroud)将 CA 的 Java 证书导入密钥库。我不太确定这有什么魔力,但如果没有它,证书链就不会被遵循(即使手动添加中间证书)。该证书通常通过您的签名证书所在的电子邮件提供。出于我们的目的,它被称为signing.pkcs7。
keytool -importcert -file signing.pkcs7 -keystore keystore -v -alias signing
Run Code Online (Sandbox Code Playgroud)
您必须输入创建 Java 密钥库时使用的密钥库密码。
使用 maven-jarsigner-plugin (或任何需要自动化的工具)在构建过程中对项目进行签名。
| 归档时间: |
|
| 查看次数: |
9524 次 |
| 最近记录: |