Jim*_*imN 18 java jar code-signing java-web-start jarsigner
快速背景: 我们发布了一个webstart应用程序,其中包括我们自己的应用程序罐和众多第三方jar.Webstart要求jnlp文件引用的所有分布式jar都由单个证书签名.因此,我们使用自签名证书签署所有罐子(我们的罐子和第三方罐子).一些第三方罐子已经由生产它们的一方签署,但我们只是再次签署它们,这很好.到现在.
问题: 我们最近从Java 6迁移到Java 7,突然webstart拒绝加载一些jar,抱怨:"无效的SHA1签名文件摘要".这只发生在一些罐子而不是其他罐子上,并且那些失败的罐子似乎有多个签名.
在搜索SO和互联网之后,似乎Java的jarsigner的默认签名算法在Java 6和Java 7之间已经发生了变化,从SHA1到SHA256,并且各种人都建议使用"jarsigner -digestalg SHA1"来解决验证问题.我试过了,果然我们的多重签名罐子验证了.所以这似乎是我们问题的解决方法.
从我可以收集到的内容来看,第三方签名似乎是SHA1签名,我们使用默认签名 - SHA256签名 - 导致签名混合.当我使用'-digestalg'开关强制SHA1时,我们有两个相同类型的签名,验证现在可以正常工作.所以似乎这个问题是由多个签名使用不同的算法引起的?或者还有其他一些我缺失的因素.
问题:
您可以为每个引用相关jar文件的第三方签名者创建单独的JNLP文件,然后让您的主JNLP使用该<extension>元素依赖于这些文件,而不是自己重新签名第三方jar .所有JAR文件必须由同一签名者签名的限制仅适用于一个JNLP,每个扩展可以具有不同的签名者.
如果做不到这一点,您可以在添加自己的签名之前删除第三方签名(通过重新打包META-INF/*.{SF,DSA,RSA})
| 归档时间: |
|
| 查看次数: |
8228 次 |
| 最近记录: |