我在一家使用 jnlp 文件启动基于 swing web 的 java 应用程序的公司进行开发。它有大量的 jar 下载到客户端的 jvm 缓存中。当我将我的 jvm 更新到当前最新版本(构建 1.7.0_45-b18)时,当我尝试运行 jnlp 文件时,我开始看到下面的安全警告:
在我看到这个错误并阅读这篇关于从 oracle 站点签署 jnlp 文件的文章后 ( Signing JNLP files ) 然后我在项目中添加了三样东西:
- 一个 JNLP-INF 文件夹,包括一个 APPLICATION.JNLP 文件到我所有的 jar 中,除了第三方的。
- 用我自己公司的数字证书+keystore bundle给所有那些jar包签名
- 通过java控制面板将数字证书导入到我信任的jvm Ca证书中。
在我完成上述更改并尝试在部署新 jar 后运行 jnlp 文件后,我从 jvm 收到以下安全警告消息:
如您所见,安全警告的严重级别已更改为更受欢迎的级别,现在发布者的名称不是未知的。它是证书中的名称。即使警告级别降低,它仍然是一个警告,我不希望我的最终用户每次都看到它。我该如何解决这个问题?
- 我是否也应该尝试对所有第三方 jar 进行签名?如果是这样,我怎么能用 Ant 命令来做呢?如何提取第三方 jar 并在其中添加 JNLP-INF 文件夹,然后使用 Ant 将其重新打包为 jar?
- 我是否还应该签署最终的 myapplication.ear 文件,其中包含 JNLP-INF 子文件夹。此 ear 文件已部署到 jboss 服务器?
- 我应该在 jars 中的 META-INF/MANIFEST 文件中添加一些额外的行吗?
- 我是否应该期望 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/