【问题标题】:jarsigner and files / directories in META-INFMETA-INF 中的 jarsigner 和文件/目录
【发布时间】:2014-08-14 18:37:39
【问题描述】:

我在签署 jar 文件时遇到问题。我在 META-INF 目录中有一些文件,当我使用 jarsigner 时它们没有得到签名,但是由于未签名的条目,验证失败。

我没有创建 jar,因此我无法更改其结构和/或删除文件。

如何从 META-INF 中获取已签名的文件?

这里是 build.xml 文件中操作 JAR 文件的部分:

1345           <jar destfile="${proj.build.webui.war.dir}/name.jar"
1346               update="true">
1347               <manifest>
1348                   <attribute name="Permissions"
1349                       value="all-permissions"/>
1350                   <attribute name="Codebase" 
1351                       value="*"/>
1352                   <attribute name="Trusted-Library"
1353                       value="true"/>
1354               </manifest>
1355           </jar>
1356           <!-- sign the jar files -->
1357           <chmod perm="u+x">
1358               <fileset dir="${proj.buildtools.dir}">
1359                   <include name="DsJarSigner"/>
1360               </fileset>
1361           </chmod>
1362           <signjar destDir="${proj.build.webui.war.dir}"
1363               alias="encryptedAlias"
1364               keystore="${proj.buildtools.dir}/keystore.jks"
1365               storepass="encryptedPassword"
1366               executable="${proj.buildtools.dir}/DsJarSigner"
1367               preservelastmodified="true" >
1368               <path>
1369                   <fileset dir="${proj.build.webui.war.dir}" includes="name.jar" />
1370               </path>
1371               <flattenmapper />
1372           </signjar>

DsJarSigner 是一个调用 jarsigner 的简单 Java 程序。

【问题讨论】:

  • jarsigner 应该对整个 jar 进行签名。你给出什么命令,你得到什么错误信息?
  • 我正在使用 ant 任务,所以我不确定确切的命令是什么。签名后,清单中会出现新条目,例如“名称: SHA1-Digest:LzA8be0iXjzymZZkAu/AeNM9yuQ="。但是来自 META-INF 的文件没有这样的条目。然后,当我尝试验证 jar 时(例如将其用作小程序,我得到关于未签名条目的安全异常。如果我从 META-INF 中手动删除除清单和 2 个签名之外的所有文件,则不会引发异常- 相关文件。
  • 向我们展示 build.xml 的部分,从创建 Jar 到 Jar 上的最后一个操作。这通常是由于东东的顺序错误造成的。例如。在代码签名后索引 Jar 条目。
  • 我已将 build.xml 的一部分添加到问题中。请注意,我不是在创建 jar,也无法修改其结构。

标签: java jar applet jarsigner meta-inf


【解决方案1】:

看起来你的 jarsigner 跳过了META-INF 中的文件。除了使用另一个签名者之外,您无能为力。例如,来自 OpenJDK 8 skips some files from META-INF 的 jarsigner,它认为它是“与签名相关的”,而不是其他的。我观察到来自 Oracle JDK 的 jarsigners 也在做同样的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多