2011-11-18 60 views
14

我一直在试图验证JAR签名:无效SHA1签名文件消化

jarsigner -verify -verbose -certs example.jar 

我得到了以下问题:

jarsigner: java.lang.SecurityException: invalid SHA1 signature file digest for o 
rg/apache/log4j/net/DefaultEvaluator.class 

我得到了有关使用-digestalg SHA-1一些建议,但我不知道我应该在哪里发表这个声明!

我希望你能帮我解决这个问题。

回答

13

这里是解决方案:

jarsigner -keystore mykeystore -digestalg SHA1 jarfile alias 

验证:

jarsigner -verify -verbose -certs jarfile 
+0

如果您获得OP获得的消息的SHA-256变体,该解决方案也可以工作。 – slm

+3

这只适用于原瓶未签名的情况。 –

+0

这似乎并没有在Java 7和8上工作。 – Ahmed

27

当罐子签订两次也有可能发生这种错误。

解决方案是通过删除*来“解除”罐子。 SF,*。 DSA,*。 RSA文件从罐子的META-INF,然后再次签署罐子。

+1

确认,对我来说问题是jar被两次签名。 – Doug

+2

在我的情况下是不够的。还必须删除清单文件中的“SHA”记录。 – Makatun

2

这对我有效。我必须将ANT更改为版本1.8.3,并添加DIGESTALG属性:

<!-- VLS2014 ADDED digestalg="SHA1" --> 
<signjar keystore="${security.keystore}" 
     storepass="${security.storepass}" 
     keypass="${security.keypass}" 
     alias="${security.alias}" 
     jar="${basedir}/temp/tj/${justfname}" 
     signedjar="${real.signed.jar}" 
    digestalg="SHA1" 
     /> 

<delete file="${basedir}/temp/tj/${justfname}" /> 
</target>