【问题标题】:Java 7 Manifest Security ChangesJava 7 清单安全性更改
【发布时间】:2014-01-12 15:06:49
【问题描述】:

随着最近对 Java 7s 安全检查的更改,我正在更新我们的 webstart 应用程序以允许它在没有警告的情况下运行。

我们的 webstart 应用程序由许多 jar 文件组成,其中只有少数是我们开发的,我们使用了许多 3rd 方 jar 文件(log4j、swingx、...)

我们之前的设置使用了自签名证书,我们用它签署了所有 jar 文件。 我们现在已经从适当的 CA 购买了签名证书。

到目前为止我采取的步骤是:

  • 解压jar文件
  • 从所有 jar 文件中删除旧证书(从清单中删除 *.DSA *.SF *.RSA 和哈希)
  • 重新打包jar文件
  • 将权限、代码库、应用程序名称属性添加到包含我们的主类的 jar 文件中。
  • 使用新密钥签署 jar 文件

在带有 Java 7 u45 的机器上的 webstart 中运行它不会出现警告对话框,这很棒。

但是,查看 java 控制台,我看到它警告有关其他 jar 文件的所有 jar 缺少 Permission、Codebase、Application-Name 属性。我是否也应该将这些属性添加到每个 jar 文件中?

我已经对重新打包 3rd 方 jar 文件感到不安,但现在不得不添加清单属性让我觉得我错过了一些东西。

所以,改变清单,还是别的什么? 谢谢,圣诞快乐

编辑: 感谢您提供有用的回复,我只是想用我已实施的解决方案的一些细节来更新它。

我采取以下步骤重新打包应用程序所需的每个 jar 文件。 - 解压jar文件到一个临时目录
- 从 META-INF 中删除 *.DSA *.RSA *.SF
- 从 META-INF/MANIFEST.MF 中删除以
开头的行 - SHA-256-摘要
- SHA1-摘要
- 权限
- 代码库
- 应用程序名称
- 在 META-INF/MANIFEST.MF 中插入行
- 权限:所有权限
- 代码库:*
- 应用程序名称:我的应用程序名称
- 确保 MANIFEST.MF 中的所有行尾都适合我的系统 (dos2unix)
- 使用指定的新清单重新创建 jar 文件
- 使用当前代码签名证书对 jar 文件进行签名

希望有帮助

【问题讨论】:

  • “我已经对重新打包 3rd 方 jar 文件感到不安,但现在不得不添加清单属性让我觉得我错过了一些东西。” API?
  • Andrew,你是说现在是这样,重新打包jar文件是现在应该这样吗?谢谢。
  • “这是现在的样子,重新打包jar文件是现在应该做的”是的。

标签: java jar java-web-start


【解决方案1】:

是的,您需要将PermissionCodebaseApplication-Name 清单属性添加到您的应用使用的每个.jar 中。这是主应用 .jar 以及所有 3rd 方库 .jar。

请参阅https://stackoverflow.com/a/19659135/963076 对另一个 SO 问题的回答。

你感到不安很好。据我了解,在 3rd 方库的清单中添加内容违反了几乎所有库附带的 GNU 许可协议。我一直在摸不着头脑,因为 Oracle 一直在发布这些更新,说明他们在想什么。为什么第三方库需要指定 JNLP 代码库?他们知道他们在强迫我们违反这些 3rd 方库的许可协议吗?

但是,唉,如果您希望这些警告消失,甚至希望您的应用能够在未来的 Java 更新中运行,那么您必须这样做。事实是,如果您使用像 Netbeans 这样的 IDE,那么它已经在重新打包和退出您的 3rd 方库 .jars 无论如何。因此,您不会违反任何您的 IDE 尚未违反的规则。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多