签署一个jnlp以摆脱安全警告

时间:2014-01-06 09:48:35

标签: java java-ee applet jnlp jar-signing

我正在一家公司开发,在该公司中使用jnlp文件来启动基于sw的web的Java应用程序。它有很多罐子可以下载到客户端的jvm缓存中。当我将我的jvm更新到其当前最新版本(build 1.7.0_45-b18)时,当我尝试运行jnlp文件时,我开始看到下面的安全警告:

Unknown publisher error

在看到此错误后,阅读了有关从oracle站点(Signing JNLP files)签署jnlp文件的文章 然后我在项目中添加了三件事:

  1. JNLP-INF 文件夹,其中包含 APPLICATION.JNLP 文件到我的所有邮箱中,但第三方邮箱除外。
  2. 使用我公司的数字证书+密钥库捆绑包签署所有这些罐子
  3. 通过java控制面板将数字证书导入我的jvm可信Ca证书。
  4. 在我完成上述更改并尝试在部署新jar后运行jnlp文件后,我从jvm获得了以下安全警告消息:

    known publisher but still jnlp not signed error

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

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

      感谢任何帮助/评论/头脑风暴。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

我相信您收到此警告是因为您要求JNLP以完全权限运行,并且用户需要知道这一点。

如果您的应用程序不需要访问关键资源(例如写入硬盘驱动器),则可以通过替换以下内容在沙盒模式下运行应用程序:

<security>
    <all-permissions />
</security>

通过

<security>
    <sandbox />
</security>

http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/manifest.html

中所述

您也可以将其删除,因为沙箱是默认值。