java - 签署 jnlp 以摆脱安全警告

标签 java jakarta-ee applet jnlp jar-signing

我在一家使用 jnlp 文件启动基于 swing web 的 java 应用程序的公司进行开发。它有大量的 jar 下载到客户端的 jvm 缓存中。当我将我的 jvm 更新到当前最新版本(构建 1.7.0_45-b18)时,当我尝试运行 jnlp 文件时,我开始看到下面的安全警告:

Unknown publisher error

在我看到这个错误并阅读这篇关于从 oracle 站点签署 jnlp 文件的文章后 ( Signing JNLP files ) 然后我在项目中添加了三样东西:

  1. 一个 JNLP-INF 文件夹,包括一个 APPLICATION.JNLP 文件到我所有的 jar 中,除了第三方的。
  2. 用我自己公司的数字证书+keystore bundle给所有那些jar包签名
  3. 通过java控制面板将数字证书导入到我信任的jvm Ca证书中。

在我完成上述更改并尝试在部署新 jar 后运行 jnlp 文件后,我从 jvm 收到以下安全警告消息:

known publisher but still jnlp not signed error

如您所见,安全警告的严重级别已更改为更受欢迎的级别,现在发布者的名称不是未知的。它是证书中的名称。即使警告级别降低,它仍然是一个警告,我不希望我的最终用户每次都看到它。我该如何解决这个问题?

  1. 我是否也应该尝试对所有第三方 jar 进行签名?如果是这样,我怎么能用 Ant 命令来做呢?如何提取第三方 jar 并在其中添加 JNLP-INF 文件夹,然后使用 Ant 将其重新打包为 jar?
  2. 我是否还应该签署最终的 myapplication.ear 文件,其中包含 JNLP-INF 子文件夹。此 ear 文件已部署到 jboss 服务器?
  3. 我应该在 jars 中的 META-INF/MANIFEST 文件中添加一些额外的行吗?
  4. 我是否应该期望 oracle 阻止我的应用程序以这种级别的警告在 jvm 上运行?

我的 JNLP 文件是这样的文本:

<?xml version="1.0" encoding="utf-8"?>
    <jnlp spec="1.0+" codebase="http://10.100.10.9/ikarusdelhitest/" href="ikarus.jnlp">
<information>
    <title>Ikarus</title>
    <vendor>My Company name</vendor>
    <homepage href="http://www.mycompanyname.com" />
    <description>My jnlp triggered web based enterprise software</description>
    <icon href="ikarus.ico" />
    <offline-allowed />
</information>
<security>
    <all-permissions />
</security>
<resources>
    <j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"
        java-vm-args="-Xnoclassgc -Xincgc -client -XX:DefaultMaxRAM=208M -Xms64M -Xmx256M -XX:PermSize=32M -XX:MaxPermSize=128M -XX:MinHeapFreeRatio=15 -XX:MaxHeapFreeRatio=50" />
    <jar href="jars/ikarus/ikarusClient.jar" />
    <jar href="jars/ikarus/ikarusDelegators.jar" />
    <jar href="jars/ikarus/clientRules.jar" />
    <jar href="jars/ikarus/ruleImps.jar" />
    <jar href="jars/ikarus/ikarusUtil.jar" />
    <jar href="jars/ikarus/ikarusResources.jar" />
    <jar href="jars/ikarus/domain.jar" />
    <jar href="jars/ikarus/domain_repository.jar" />
    <jar href="jars/ikarus/domain_service.jar" />
    <jar href="jars/ikarus/app_repository.jar" />
    <jar href="jars/ikarus/app_service.jar" />
    <jar href="jars/ikarus/infrastructure.jar" />
    <jar href="jars/ikarus/integration_domain.jar" />
    <jar href="jars/jboss_ejb_auth/ejb3-persistence.jar" />
    <jar href="jars/jboss_ejb_auth/jboss-ejb3x.jar" />
    <jar href="jars/jboss_ejb_auth/jbossall-client.jar" />
    <jar href="jars/jasper/commons-beanutils-1.8.0.jar" />
    <jar href="jars/jasper/commons-collections-3.2.1.jar" />
    <jar href="jars/jasper/commons-digester-1.7.jar" />
    <jar href="jars/jasper/commons-logging-1.1.jar" />
    <jar href="jars/jasper/iText-2.1.0.jar" />
    <jar href="jars/jasper/jasperreports-3.6.0.jar" />
    <jar href="jars/jasper/poi-3.2-FINAL-20081019.jar" />
    <property name="jnlp.localization" value="Delhi"/>
</resources>
<application-desc main-class="com.celebi.ikarus.main.Ikarus" />

感谢您的帮助/评论/头脑 Storm 。

最佳答案

由于 java-vm-args,这个 JNLP 似乎需要签名,但意识到大多数与内存相关的选项都可以以某种方式指定,以便 JNLP 需要签名。我建议您改用这种方式。

编辑

JNLP 是 Java 插件的一部分,它已从浏览器中删除,并在 Java 9 前后被 Oracle 弃用。使用其他方法启动应用程序。

关于java - 签署 jnlp 以摆脱安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20947154/

相关文章:

java - 如何让keyevent在小程序中工作?

java - 如何使用 Cucumber 标签和 JUnit 构建顺序测试?

java - J2ME应用程序预验证是什么意思?

java - 如何找回 "Eclipse >Generate>Jaxb classes"选项?

ant - 有没有更简单的方法来部署到WebSphere?

jakarta-ee - javax.el.E​​LException : The identifier [return] is not a valid Java identifier

java - 如何读取序列化文件?

java - 在 Spring 中从 Ajax 调用接收 Controller 中的参数

java - 将 Java Applet 替换为另一种技术

applet - 签署 .Jar 文件