Netbeans IDE を使用して jar に署名しました。
信頼できる証明書を使用して jar に署名し、Netbeans UI ダイアログでキーストアの詳細とキー エイリアスを入力しました。
製品バージョン: NetBeans IDE Dev (ビルド nbms-and-javadoc-482-on-20130914) Java: 1.7.0_25; Java HotSpot(TM) クライアント VM 23.25-b01 ランタイム: Java(TM) SE ランタイム環境 1.7.0_25-b16
jnlp ファイルをクリックして実行すると、Keystore 例外が発生しました。ここで説明されているように、ユーザーが手動で証明書を Java cacerts キーストアにインポートする必要があるかどうか疑問に思いましたhttp://docs.oracle.com/javase/tutorial/security/sigcert/index.html#GenCSR
そうしましたが、「証明書がキーストアに追加されました」というメッセージが表示されました。Oracle によって設定されたパスワードは、changeit です。しかし、JNLP ファイルをダブルクリックすると、「実行時エラーです。詳細についてはクリックしてください」というポップアップが表示されます。スタック トレースを取得しません。私が見る限り、Java コンソールにはエラーは表示されず、'CacheEntry' の数行しか表示されません。
Web Start/JNLP がこのようなことをしないのはなぜですか?
1) jar ファイルには、チェーン内の証明書が含まれています。
2) JNLP ファイルに証明書のエントリがある。
3) ユーザーが jnlp ファイルをクリックすると、Java は証明書を抽出して Java キーストアにインポートし、プログラムを実行します。
しかし、もっと重要なのは、なぜ私のプログラムが実行されていないのでしょうか? 自己署名されたjarを拒否する前に、Java 7.21より前のバージョンを正常に実行していました。
アップデート:
Java コントロール パネルで、[詳細] に移動し、デバッグとログのトレースを有効にしました。Java コンソールでは、
java.lang.SecurityException: invalid SHA1 signature file digest for org/bouncycastle/cert/jcajce/JcaX509CRLHolder.class
at sun.security.util.SignatureFileVerifier.verifySection(Unknown Source)
at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
at sun.security.util.SignatureFileVerifier.process(Unknown Source)
at java.util.jar.JarVerifier.processEntry(Unknown Source)
at java.util.jar.JarVerifier.update(Unknown Source)
at java.util.jar.JarFile.initializeVerifier(Unknown Source)
私も見る
ExitException[ 3]com.sun.deploy.net.FailedDownloadException: Unable to load resource: file:/C:/Users/me/Desktop/dist/lib/bcpkix-jdk15on-149.jar
at sun.plugin2.applet.JNLP2Manager.downloadResources(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.prepareLaunchFile(Unknown Source)
at sun.plugin2.applet.JNLP2Manager.loadJarFiles(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
その場所に bcpkix-jdk15on-149.jar があります。