2014-01-06 14 views
5

jnlpファイルがスイングウェブベースのJavaアプリケーションを起動するために使用されている会社で開発しています。それは、クライアントのjvmキャッシュにダウンロードされるたくさんのjarファイルを持っています。私はその現在の最新バージョン(1.7.0_45-B18を構築)に自分のJVMを更新したとき、私はJNLPファイルを実行しようとすると、以下のセキュリティ警告を見て開始しました:セキュリティ警告を取り除くためにjnlpに署名する

Unknown publisher error

私はこのエラーを見て、読んだ後オラクルのサイト(Signing JNLP files) からJNLPファイルに署名については、この記事で、私はプロジェクトに3つのことを追加しました:

  1. APPLICATION.JNLPファイルを含むJNLP-INFフォルダすべての私のjarファイルへの元第三者のものを控える。
  2. 私の会社のデジタル証明書+キーストアバンドルにすべて署名する
  3. デジタル証明書をJavaコントロールパネル経由でjvmの信頼できるCA証明書にインポートします。あなたがセキュリティ警告のを見ることができるように

    known publisher but still jnlp not signed error

    :私は上記の変更を行なったし、新しいjarファイルの展開後JNLPファイルを実行しようとした後、私はJVMから次のセキュリティ警告メッセージが表示されました

重大度がより歓迎されたレベルに変更され、発行者の名前は不明ではありません。これは証明書の名前です。警告のレベルが下がっても、それはまだ警告であり、私はエンドユーザに毎回これを見せたくない。どうすればこの問題を解決できますか?

  1. 第3パートのすべてのジャーにも署名する必要がありますか?もしそうなら、私はどのようにAntコマンドでそれを行うことができますか?サードパーティ製のjarを抽出し、その中にJNLP-INFフォルダを追加して、Antを使用してjarファイルとして再パックするにはどうすればよいですか?
  2. myapplication .earファイルにJNLP-INFサブフォルダを添付してください。このearファイルはjbossサーバーにデプロイされていますか?
  3. JARのMETA-INF/MANIFESTファイルに余分な行を追加してください。
  4. この警告レベルでjvmで実行するアプリケーションをブロックするためにoracleが必要ですか?

マイ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" /> 

感謝。

+0

だからチェックするだけです。すべてのJAR、* 3部ジャーを含む*、*はあなたの会社の証明書でデジタル署名されていますか?そうでない場合は、「アプリケーションの一部に電子署名がありません」という*メッセージが説明されます。 –

+0

はいjnlp内にリストされているすべてのjarが署名されています。しかし、第三者以外の人だけが内部にJNLP-INF/APPLICATION.JNLPサブフォルダを持っています。これは問題を引き起こすでしょうか? –

+2

AFAIUメインのJarだけが署名されたJNLPを必要とします。 BTW - [JaNeLA](http://pscode.org/janela/)を使用してJNLPを確認してください。ところで。このJNLPは 'java-vm-args'のために署名が必要なようですが、メモリ関連のオプションの大部分はJNLPが署名する必要がないように指定できることに気付きます。代わりにそれらを試して、あなたのアプリで動作するかどうかを確認することができます。 –

答えて

4

このJNLPは理由java-vm-argsの署名を必要とするが、JNLPがに署名する必要はないないように、メモリ関連のオプションのほとんどが途中で指定することができることを実現しているようです。代わりにその方法を試してみることをお勧めします。

+0

ありがとう@Andrew Thompson。それがSecurityの警告を解決し、今openinの画面は[それ]です(http://imageshack.com/a/img15/5433/2n9o.png) –

3

JNLPを完全な権限で実行するように要求しているため、このことについてユーザーが知っておく必要があるため、この警告が表示されると思います。

<security> 
    <sandbox /> 
</security> 
によって

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

あなたのアプリケーションは、重要なリソースを(例えば、ハードドライブへの書き込み)アクセスする必要がない場合は、次のように置き換えることにより、サンドボックスモードでアプリケーションを実行することができます

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

に記載されているように、サンドボックスは、デフォルト値であるとして、また、それを削除することができます。

+0

部分が削除された後、ドキュメントに記載されているように、アプリケーションはデフォルトでブロックされます。_ Javaコントロールパネルのセキュリティレベルスライダが非常に高く設定されている場合は、Permissions属性が必要です。それが存在しない場合、RIAはブロックされます。_また、に変更すると、何も変わりません。 –

+0

申し訳ありませんが、私は全く間違っていました:/ FYI私はJNLPに署名していないJava Web Startアプリケーションがあり、この警告は表示されません。 – foch

+0

@alikerimerkan 'Permissions'属性はJARマニフェストで必須ですが、JNLPでは必須ではなく、デフォルトで' sandbox'になります。しかし、JARマニフェストとJNLPの値は同じでなければなりません。 –

関連する問題