我正在開發一家jnlp文件用於啓動基於swing的基於java的應用程序的公司。它有大量的jar被下載到客戶端的jvm緩存中。當我將JVM更新到其目前最新的版本(版本1.7.0_45-B18)我開始看到下面當我嘗試運行JNLP文件安全警告:簽署jnlp以擺脫安全警告
我看到這個錯誤後,讀這篇文章從甲骨文網站簽約JNLP文件(Signing JNLP files) 後來我加入三件事項目:
- 一個JNLP-INF文件夾包括APPLICATION.JNLP文件到我所有的罐子前第三方認證。
- 使用我自己的公司的數字證書+密鑰庫捆綁簽名所有這些罐子
- 通過java控制面板將數字證書導入到我信任的jvm證書中。
我做了更改後上方,並試圖新的罐子部署後運行JNLP文件我從JVM以下安全警告消息:
正如你可以看到安全警告的嚴重性級別更改爲更受歡迎的級別,現在發佈者的名稱不是未知的。它是證書中的名稱。即使警告級別降低,它仍然是一個警告,我不希望我的最終用戶每次都看到這一點。我怎麼解決這個問題?
- 我是否應該嘗試簽署所有第三部分罐子?如果是這樣,我怎麼能用Ant命令來做到這一點?我如何提取第三方jar並添加JNLP-INF文件夾,然後使用Ant將其重新打包爲jar?
- 我是否還應該簽署最終的myapplication .ear文件,其中包含JNLP-INF子文件夾。此ear文件是否部署到jboss服務器?
- 我應該在罐子裏的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" />
任何幫助的感謝/評論/頭腦風暴。
所以要檢查。所有罐子,*包括第三部分罐子,*都在貴公司的證書上進行了數字簽名?如果不是,它會解釋*「部分應用程序缺少數字簽名」*消息。 –
是的,所有jnlp中列出的罐子都被簽名。但只有非第三方的內部有JNLP-INF/APPLICATION.JNLP子文件夾。這會導致問題嗎? –
AFAIU只有主Jar需要簽名的JNLP。順便說一句 - 請務必使用[JaNeLA](http://pscode.org/janela/)檢查JNLP。順便一提。由於'java-vm-args',這個JNLP似乎需要簽名,但是要認識到大多數與內存相關的選項都可以用某種方式指定,以便JNLP不需要簽名。您可以嘗試使用它們來查看它是否適用於您的應用。 –