- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的公司为服务器生产 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 申请”证书
<yourapp>.app/Contents/Java/
现在,如果一切正常,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/
我们有一套多平台的命令行可执行文件和库,可以移植到 Mac。文件布局是 /应用程序/ (公司文件夹)/ (我们的用户界面).app (产品名称)/ 仓/ ...执行... 库/ ...dylibs..
我正在尝试将 ProxyInjector 设置为自动将 keycloak-gateway 注入(inject)任何具有如下注释的容器中,这些容器用于我在 kubernetes 上部署的服务: "ann
我正在为 iPhone 开发一个应用程序。有时我会收到此日志: Named service 'com.apple.PersistentURLTranslator.Gatekeeper' not fou
我在 Xcode 中有一个被 Gatekeeper 阻止的“命令行工具”目标(不是应用程序包)。多年来,我一直将此工具用作 PostCheck 地址簿插件的简单安装程序。 2012 年,我使用我的 A
目标 :当 nginx 入口具有事件重写目标功能时,Keycloak 网守部署。 Ingress 根据以下内容重写目标: rewrite.bar.com/something/重写为 rewrite.b
我将我的 Mac 操作系统更新到 Catalina beta 版本,并在卸载 DMG 时收到 Gatekeeper 警告,提示为“MyApp.app 无法打开,因为苹果无法检查它是否存在恶意内容”。但
设置 aud 的正确方法是什么?声称避免以下错误? unable to verify the id token {"error": "oidc: JWT claims invalid: inval
我想知道控制与某些事件监听器关联的逻辑是否处于事件状态的最佳方法。 我自然而然地遇到了三种控制事件监听器内部逻辑的方法。 使用一个可由所有连接的套接字访问的变量,充当看门人。如果一个套接字将该变量设置
我观察到,一旦我的签名应用程序从 Internet 下载并通过了 GateKeeper 接受(即我在警告对话框中单击“确定”),它就永远不会再次被隔离。也就是说后续的下载不会收到任何警告。即使它是应用
在 MacOS Mojave 10.14.5 上,依赖 TCP 连接的本地服务会随机中止连接,从而导致“Mysql 已消失”和 Nginx 连接重置等错误。 似乎 Mojave 操作系统正在监视并阻止
来自苹果最近的一篇文章: With the release of OS X Mavericks 10.9.5, the way that OS X recognizes signed apps wil
当前流量: incoming request (/sso-kibana) --> Envoy proxy --> /sso-kibana 预计流量: incoming request (/sso-ki
我正在尝试向 OS X 用户分发 Java 应用程序。我没有使用 Mac 商店——它将通过我自己的网站进行分发。无论我尝试什么,OS X 的 Gatekeeper 都会拒绝该应用程序。 这是我的方法:
我是否需要 99 美元的 Apple 开发者帐户才能使我的应用程序避免“ [此应用程序] 无法打开,因为它来自身份不明的开发者”警告,或者我可以通过免费的开发者帐户?我知道我的客户可以通过更改他们的
自从我将我的 MacBook 升级到 macOS Catalina。尽管我禁用了“spctl”,但我还是收到了永久消息(“ideviceinfo”无法打开,因为开发人员未经过验证)。有人可以帮忙吗?我
在 OS X 10.8 的新版本中,当您尝试启动已签名的 Java 小程序时,Gatekeeper 将弹出以下警告: 小程序已使用有效的代码签名证书进行签名,并且可以在其他平台以及以前版本的 OS X
我的公司为服务器生产 Java 应用程序并提供 JNLP 文件以启动本地应用程序。从 OSX 10.8.4 开始,需要使用 Developer ID 对 JNLP 文件进行签名才能让 Gatekeep
我想在 K8sPSPCapabilities 约束模板中将一个容器列入白名单,但我在使用 rego 语言时遇到了一些困难。我想禁止除特定容器之外的所有容器的 NET_RAW 功能。如果有人能指出我正确
我正在构建我的应用程序并使用有效的代码签名证书(开发人员 ID 应用程序...)进行签名: codesign --force --verify --verbose --sign "Developer
场景 我想发布一个适用于 Mac OS X 的应用程序,但不在 AppStore 上。该应用程序在 10.6 - 10.8 及更高版本上运行。 问题 Apple 要求 Mac OS X 10.8+ 的
我是一名优秀的程序员,十分优秀!