什么会导致jarsigner覆盖MANIFEST.MF文件?

8 浏览
0 Comments

什么会导致jarsigner覆盖MANIFEST.MF文件?

为什么有时候Jarsigner会覆盖MANIFEST.MF文件,而不仅仅是将签名条目附加到要签名的JAR文件中的现有MANIFEST.MF文件中。\n注意:我将此问题发布为开放式问题,并将提供一个导致此问题的情况的答案或观察。如果还有其他情况或情景可能会发生这种情况,希望其他人能扩展此问题。

0
0 Comments

有时候,使用jarsigner工具进行签名时,会出现覆盖MANIFEST.MF文件的问题。解决这个问题的方法是升级jarsigner插件的版本到3.0.0,并在pom.xml文件中进行相应的配置。

具体的解决方法如下,在pom.xml文件中添加以下代码:

...

    org.apache.maven.plugins
    maven-jarsigner-plugin
    3.0.0
    
        
            sign
            
                sign
            
        
    
    
        mykeystore.jks
        myalias
        password
        password
    

...

当然,还可能会出现其他问题,比如在我个人的案例中出现了ClassNotFoundException的错误。经过排查发现,在我的JAR文件的META-INF文件夹中包含了一些来自bouncycastle签名的JAR文件的.SF和.DSA文件,这些文件通过shade插件被传递到了我的JAR文件中,它们与后续使用jarsigner插件进行签名时产生了冲突,导致在使用"java -jar myjar.jar"命令运行结果时出现了"invalid signature file digest for manifest main attributes"的错误。

原文链接:[this error](https://stackoverflow.com/questions/34855649)

以上就是解决jarsigner覆盖MANIFEST.MF文件的问题的具体方法。

0
0 Comments

问题出现的原因是,当使用jarsigner签名debug jar时,MANIFEST.MF文件会被覆盖,只包含签名条目。然而,当使用jarsigner签名release jar时,签名条目会被追加到现有的MANIFEST.MF文件的末尾。根据进一步的调查,发现原始的MANIFEST.MF文件没有包含"Manifest-Version"头条目。添加了这个条目后,再次使用原始的"debug.keystore"签名debug jar时,两个jar都将签名条目追加到现有的MANIFEST.MF文件的末尾,而不是覆盖MANIFEST.MF文件。

解决方法是,为MANIFEST.MF文件添加"Manifest-Version"头条目。这样,在使用jarsigner签名debug jar时,MANIFEST.MF文件不会被覆盖,而是将签名条目追加到现有的MANIFEST.MF文件的末尾。

在这个问题中,还观察到使用不同的keystore会导致不同的结果。使用默认的"debug.keystore"时,MANIFEST.MF文件被覆盖;而使用私有keystore时,MANIFEST.MF文件被追加。这表明与keystore本身有关的因素决定了MANIFEST.MF文件是否被覆盖。

总之,解决这个问题的方法是为MANIFEST.MF文件添加"Manifest-Version"头条目。这样,不论是使用哪个keystore,签名条目都会被追加到现有的MANIFEST.MF文件的末尾,而不是覆盖MANIFEST.MF文件。

0