gpt4 book ai didi

java - 如何为 OSX 和 Gatekeeper 签署(动态)JNLP 文件

转载 作者:IT老高 更新时间:2023-10-28 20:47:30 24 4
gpt4 key购买 nike

我的公司为服务器生产 Java 应用程序并提供 JNLP 文件以启动本地应用程序。从 OSX 10.8.4 开始,需要使用 Developer ID 对 JNLP 文件进行签名才能让 Gatekeeper 满意(它实际上在最底部的 release notes 中)。

问题是:如何做到这一点? AFAIK 您可以签署应用程序(我们有一些使用开发人员 ID 签名的 Java 应用程序) - 但 JNLP - 文件就是这样:文件。

下一步:如何使用生成的 JNLP 文件执行此操作。我们必须修改它们,因为它们来自服务器 - 例如属性、基本 URL 等。

AFAIK Java has a certain mechanism说 JNLP 文件是通过它们各自的 JAR 文件(包含主类的文件)签名的 - 但是:Jar 文件是用不同的证书签名的,它们也不会满足 Gatekeeper。

我确实找到了 one reference on how to sign tools and stuff ,但不适用于动态文件的场景。

我不想要的答案:右键单击并打开以覆盖 Gatekeeper 或更改系统或 Java 设置。这不是一个选择。

[更新]从 OSX 10.9.5 开始,您还必须使用 OSX 10.9+ 进行签名并拥有有效的版本 2 签名。这将如何完成?

最佳答案

我想我找到了解决办法。目前唯一能想到的。我们基本上需要使用自定义应用启动器包装 JNLP,签署应用,确保我们可以在服务器上动态修改 JNLP,然后让它运行。

您可能知道,有一个 app bundler 项目可以将任何 JAR 文件打包到 OSX 可执行文件中。这可以签名、交付并且不会使 Gatekeeper 失败。我制作了一个自定义 fork(用于拉入主 fork),它可以获取一个 JNLP 文件,将其包装起来,您就有一个自定义应用程序可以完成 JNLP 应该做的所有事情。

但是,要求是您确实拥有有效的“开发者 ID 申请”证书

  1. 前往 bitbucket.org并下载当前版本
  2. 运行 ant 任务并构建 appbundle 包。
  3. 查看用于创建应用容器的示例构建脚本的文档。
    • 该示例目前未将 JNLP 包含到应用程序中。
    • 以某种方式创建应用程序签名,以便以后可以修改 JNLP 文件。
    • 正在将应用程序放入一个 zip 文件中。这对于下载应用程序很重要,因为它们只是目录
  4. 创建您的服务器代码。加载ZIP文件,将JNLP文件放入目录<yourapp>.app/Contents/Java/
  5. 提供 zip 文件。

现在,如果一切正常,zip 文件应该会自动解压到“下载”文件夹中,您应该会看到您的应用程序图标。如果你真的没弄错,你可以像正常一样执行应用程序。

我希望这将帮助许多开发人员在 OSX 中修复损坏的 JNLP 行为。

[可修改 JNLP 的更新]从 OSX 10.9.5 开始,您的应用程序需要有有效的版本 2 签名。这意味着应用程序 bundler (设置资源列表文件)以前使用的技巧不再起作用。现在所有东西都必须签名,之后几乎不可能更改已签名的应用程序。

不过,我确实找到了一种方法:使用 app bundler。将 JNLP 设置为 Contents/_CodeSignature 中的文件目录。不要在那里复制您的可修改 JNLP,但请执行此操作,例如稍后在修补 zip 时使用 Java(无论如何您都需要一些代码)。

请注意:仅当您必须将另一个 JNLP 文件动态放入应用程序容器时才需要这样做(这就是问题所在)

更新(08-2017)

Oracle 将于 9 月底发布 Java 9。 appbundle 没有正确处理 java9 虚拟机。他们改变了很多 API 和 javaws 的工作方式。因为我需要说:如果你想使用封装的 JNLP 应用程序,请坚持使用 java8。

关于java - 如何为 OSX 和 Gatekeeper 签署(动态)JNLP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16958130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com