当前位置: 首页 > 面试题库 >

如何为OSX和Gatekeeper签名(动态)JNLP文件

阎嘉荣
2023-03-14
问题内容

我公司生产用于服务器的Java应用程序,并提供JNLP文件以启动本地应用程序。从OSX
10.8.4开始,需要使用开发人员ID对JNLP文件进行签名,以使Gatekeeper保持满意状态(实际上位于发行说明的最底部)。

问题是:如何做到这一点?AFAIK,您可以签署Apps(我们有一些带有Developer ID的Java Apps签署)-但JNLP-文件就是这样:文件。

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

AFAIK
Java具有某种机制,可以说JNLP文件通过各自的JAR文件(保存主类的文件)进行签名-
但是:Jar文件使用不同的证书进行签名,它们也不会满足Gatekeeper的要求。

我确实找到了有关如何对工具和内容进行签名的参考,但是它不适用于动态文件的情况。

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

[更新]自OSX 10.9.5起,您还必须使用OSX 10.9+签名并具有有效的版本2签名。怎么做?


问题答案:

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

您可能已经知道,有一个应用程序捆绑程序项目,可以将任何JAR文件包装到OSX可执行文件中。可以签名,交付,并且不会使Gatekeeper失败。我制作了一个自定义派生叉(用于主派生),可以将JNLP文件打包,然后打包,您有一个自定义应用程序执行JNLP应该做的所有工作。

但是,要求您确实具有有效的“开发人员ID应用程序”证书

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

现在,如果一切顺利,则应该自动将zip文件解压缩到“下载”文件夹中,并且您应该会看到应用程序图标。如果您确实没有犯错,则可以像执行普通应用程序一样执行该应用程序。

我希望这将有助于许多开发人员使用OSX修复损坏的JNLP行为。

[可修改JNLP的更新]自OSX
10.9.5起,要求您的应用程序上具有有效的版本2签名。这意味着它以前由应用程序捆绑程序(设置资源列表文件)使用的技巧不再起作用。一切都必须立即签名,之后几乎不可能更改已签名的应用程序。

但是,我确实找到了一种方法:使用应用捆绑程序。将JNLP设置为Contents/_CodeSignature目录内的文件。暂时不要在其中复制可修改的JNLP,但要这样做,例如稍后在修补zip时使用Java(无论如何,您都需要一些代码)。

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

更新(08-2017)

甲骨文将在9月底发布Java 9。Appbundler无法正确处理java9
vm。他们更改了很多API和javaws的工作方式。我要说的是:如果要使用包装的JNLP应用程序,请坚持使用java8。



 类似资料:
  • 我们决定按照以下oracle指南对JNLP文件进行签名。由于我们有不同的JNLP,所以我们采用了第二种方法(用JNLP模板对JAR文件进行签名)。 下面是我们提取到模板中的代码: ...这是我们实际使用的JNLP之一: null 未能验证启动文件的签名。签名的版本与下载的版本不匹配。 有人知道我错过了什么吗?

  • 我想用定制的发布

  • 问题内容: 我尝试编写一个React组件。对于html标题标签(h1,h2,h3等),其中标题优先级根据我们在道具中定义的优先级动态变化。 这是我尝试做的。 预期输出: 这是行不通的。有什么可能的方法可以做到这一点? 问题答案: 无法就地执行此操作,只需将其放在变量中(首字母大写):

  • Gatekeeper 是一个开源 DoS 防护系统。它旨在扩展到任何峰值带宽,因此它可以抵抗当今和未来的 DoS 攻击。尽管 Gatekeeper 具有地理上分散的体系结构,但对传入流量执行的所有决策的网络策略必须集中描述。这种集中化策略使网络运营商可以利用在非常高的延迟下不可行的分布式算法(例如分布式数据库),并立即应对多种多向量 DoS 攻击。 工作方式 Gatekeeper 具有两个组件:G

  • 我正在开发一个应用程序,在那里人们将从数据库中提到的一个位置下载所需的文件到他们的本地。我使用Struts2从服务器下载文件。我可以下载的文件没有任何例外,它的工作完美。但是要下载的文件具有我在struts.xml中指定的文件名,我希望它是要下载的文件名。示例如果原始文件名是struts.pdf,我正在下载它作为download.pdf,如何防止它和下载实际文件名的文件 我的struts.xml配

  • 问题内容: 我正在尝试将Java应用程序分发给OS X用户。我不使用Mac商店-可以通过我自己的网站进行分发。无论我如何尝试,OS X的Gatekeeper都会拒绝该应用程序。 这是我的方法: (1)像往常一样构建应用程序,获取一个JAR文件 (2)按此处所述使用:https : //docs.oracle.com/javase/7/docs/technotes/guides/jweb/packa