我们的产品在Java版本1.5.0_13暂停,我们想要升级。我们的软件通过Java Web Start部署了大量的jar;所有这些罐子都必须签名。但是,有几个jar不包含类文件,从Java 1.5.0_14开始,jarsign实用程序似乎选择不签署任何不包含类文件的jar。
我可以做些什么来强制jarsign签署这些罐子?或者我可以做什么来通过Java Web Start分发这些jar而不签名?是否记录了版本1.5.0_14及以上版本的变化?我在release notes中找不到它。
答案 0 :(得分:9)
我无法确认是否有任何问题。你能看一看,看看你的环境可能有什么不同吗?我在Windows 7 RC上运行。
让我们检查版本:
C:\temp>java -version java version "1.5.0_14" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03) Java HotSpot(TM) Client VM (build 1.5.0_14-b03, mixed mode, sharing)
让我们看看我们的罐子里会有什么:
C:\temp>dir /s /b com C:\temp\com\rdc C:\temp\com\rdc\test C:\temp\com\rdc\test\logging.properties
让我们制作一个罐子:
C:\temp>jar -cfv test-source.jar com/* added manifest adding: com/rdc/(in = 0) (out= 0)(stored 0%) adding: com/rdc/test/(in = 0) (out= 0)(stored 0%) adding: com/rdc/test/logging.properties(in = 13) (out= 15)(deflated -15%)
让我们签一个罐子:我正在使用自签名证书。
C:\temp>jarsigner -signedjar test-dest.jar test-source.jar vinay Enter Passphrase for keystore: Warning: The signer certificate will expire within six months.
让我们看看我们签名的罐子里有什么:
C:\temp>jar tvf test-dest.jar 155 Wed Jul 15 23:39:12 BST 2009 META-INF/MANIFEST.MF 276 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.SF 1130 Wed Jul 15 23:39:12 BST 2009 META-INF/VINAY.DSA 0 Wed Jul 15 23:37:18 BST 2009 META-INF/ 0 Wed Jul 15 19:44:44 BST 2009 com/rdc/ 0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/ 13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties
好吧,它肯定似乎已经签名,而且没有课程。我们来看看MANIFEST.MF
:
Manifest-Version: 1.0 Created-By: 1.5.0_14 (Sun Microsystems Inc.) Name: com/rdc/test/logging.properties SHA1-Digest: Ob/S+a7TLh+akYGEFIDugM12S88=
VINAY.SF
的内容:
Signature-Version: 1.0 Created-By: 1.5.0_14 (Sun Microsystems Inc.) SHA1-Digest-Manifest-Main-Attributes: 4bEkze9MHmgfBoY+fnoS1V9bRPs= SHA1-Digest-Manifest: YB8QKIAQPjEYh8PkuGA5G8pW3tw= Name: com/rdc/test/logging.properties SHA1-Digest: qXCyrUvUALII7SBNEq4R7G8lVQQ=
现在,让我们验证一下jar:
C:\temp>jarsigner -verify -verbose test-dest.jar 155 Wed Jul 15 23:51:34 BST 2009 META-INF/MANIFEST.MF 276 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.SF 1131 Wed Jul 15 23:51:34 BST 2009 META-INF/VINAY.DSA 0 Wed Jul 15 23:37:18 BST 2009 META-INF/ 0 Wed Jul 15 19:44:44 BST 2009 com/rdc/ 0 Wed Jul 15 19:44:58 BST 2009 com/rdc/test/ smk 13 Wed Jul 15 23:37:10 BST 2009 com/rdc/test/logging.properties s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified. Warning: This jar contains entries whose signer certificate will expire within six months. Re-run with the -verbose and -certs options for more details.
从表面上看,一切似乎都井然有序。您可以检查您的证书是否已过期或已被撤销?您使用的是自签名证书还是真正的证书?或者我误解了你的问题是什么?
答案 1 :(得分:2)
对于搜索此问题的任何人,我们认为它只影响Java 1.5的某些更高版本,即1.5.0_14以后的版本,我相信。它似乎在最新版本的1.5中得到修复,并且在1.6中肯定是固定的。
答案 2 :(得分:1)
如果需要,可以放入虚拟类文件。可能令人反感但也许是必要的。
答案 3 :(得分:1)
这是一个很长的镜头,但是蚂蚁SignJar task或许可以说服jarsign做正确的事。那里有很多选项可能会给你带来平衡。
答案 4 :(得分:1)
答案 5 :(得分:1)
添加它:我正在使用Java Web Start,我有一个只包含图像的jar。 使用JDK 1.6_05(也是07,10)和Ant生成,它的签名没有问题(使用自签名证书)。 因此,与其他描述的一样,它似乎没有链接到包含.class文件的jar。