我已经开始使用web start几年了,并且有签署罐子的经验,但没有。我第一次尝试使用Web start部署RCP应用程序,虽然我实际上已使用相同的证书签署了所有的jar,但我仍然收到此错误:'jnlp中的jar资源未使用相同的证书签名'
还有其他人遇到过这个吗?如果是这样,有关如何解决的任何想法?
答案 0 :(得分:12)
当我检查罐子后遇到类似的问题时,发现某些第三方罐子是由其他人签名的。
您应该为其他证书签名的jar创建一个单独的jnlp文件,并从您的jnlp文件中读取此jnlp:
<resources>
...
<extension name="other" href="other.jnlp"/>
</resources>
答案 1 :(得分:3)
这可能是您用作库的已签名jar的陈旧清单条目。我通过webstart遇到了jogl这个问题。试试这个:
解压缩所有jar,清除所有META-INF目录,然后再次对它们进行签名。
答案 2 :(得分:3)
我发现JNLP / Webstart不喜欢通过jarsigner.exe为给定的JAR进行多次签名/签名。如果BouncyCastle(预先签署的)等JAR再次与您公司的证书签署,目视检查会让我相信新的证书和签名在JAR中正确执行。但是JNLP可能只读取META-INF中的第一个(字母顺序?)签名,从而抱怨它与您的其他JAR(每个JAR上只有一个,Corporate,签名)不匹配。
答案 3 :(得分:2)
请参阅其中一个常见问题解答的解释:How do I use multiple JAR files signed by different certificates?
正确的解决方案。
答案 4 :(得分:2)
我和Matthew所描述的BouncyCastle JARs完全相同。但是,我发现JRE版本1.6.0_14及更高版本很乐意接受具有多个签名的JAR(正如我所料)。因此,我不需要使用上面描述的JNLP'组件扩展机制'。
PS 在1.6.0_14发行说明中没有找到任何对此修复的明显引用。但是,我已经验证了多个签名的JAR可以在所有更高版本中使用(至少14 - 17 + 24)。
答案 5 :(得分:0)
在我的项目中,发生的情况是负载均衡器池中有几个实例,有些实例有旧版本的代码,有些实例有新版本。因此,有证书没有由相同的证书签署......
答案 6 :(得分:0)
以下脚本列出了/ some / lib目录中每个jar中的RSA证书的序列号,有助于查找使用错误证书签名的jar:
for f in $( find /some/lib -type f -name '*.jar' )
do
serial=$( unzip -p $f 'META-INF/*.RSA' |
openssl pkcs7 -inform der -print -noout |
grep --max-count=1 serialNumber | cut -d: -f2- | tr -d ' ' )
printf "%40s: %s\n" "$serial" "$f"
done