![]() |
1
9
我无法确认是否有问题。你能看看你的环境有什么不同吗?我在Windows7RC上运行。 让我们检查一下版本: 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%) 让我们在jar上签名:我使用的是自签名证书。 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-Version: 1.0 Created-By: 1.5.0_14 (Sun Microsystems Inc.) Name: com/rdc/test/logging.properties SHA1-Digest: Ob/S+a7TLh+akYGEFIDugM12S88=
以及
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. 从表面上看,一切都井然有序。您可以检查您的证书是否过期或被吊销吗?您使用的是自签名证书还是真正的证书?还是我误解了你的问题? |
![]() |
2
2
对于任何搜索这个问题的人,我们都认为它只影响到后来的Java 1.5版本,从1.5.0S14开始,我相信。它在最新版本的1.5中似乎是固定的,在1.6中肯定是固定的。 |
![]() |
3
1
如果需要,可以将虚拟类文件放入。可能令人厌恶,但可能是必要的。 |
![]() |
4
1
顺便说一句,我尝试了和Vinay一样的方法,但是使用了JDK1.5.0 Jarsigner,以及一个合适的Verisign证书,得到了相同的结果。jarsigner工作了,jar使用jarsigner-verify进行了验证。 |
![]() |
5
1
添加它:我使用JavaWebSstart,我有一个只包含图像的JAR。 有了JDK1.6 U05(也有07、10)和Ant一代,就可以毫无问题地对其进行签名(使用自签名证书)。 因此,像其他描述的那样,它似乎没有链接到包含.class文件的jar。 |
![]() |
6
1
这是一个远射,但蚂蚁 SignJar task 可能会说服Jarsign做正确的事情。有很多选择可能会打破平衡。 |