5

私はアマチュアプログラマーです。単一の自己署名 jar ファイルで構成されるアプリケーションを作成しました。アプリケーションは数学のクラスの生徒だけが使用するので、自己署名は大丈夫だと思います。

Oracle の指示に従って jar に署名し、jarsigner ツールを使用して jar を検証しました。一応、大丈夫でした。

.jnlp ファイルには、すべての権限を持つセキュリティ タグを含めました。

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

ただし、プログラムを起動すると、ユーザーに証明書を受け入れるように促したり、クライアント コンピューターで実行するための何らかの許可を求めたりするダイアログは表示されません。Oracle のドキュメントによると、このようなダイアログが表示されるはずだと私は理解していました。

私はstackoverflowでこのページを読みました:

JNLP 許可を得る

セキュリティ例外が発生するという点で、同様の状況があります。私の場合、アプリがファイル選択ダイアログを表示しようとすると、例外がスローされます。

java.security.AccessControlException: access denied (java.util.PropertyPermission user.home read)

これは、ユーザーが許可を求められていないためです。そのstackoverflowページのアドバイスに従ったと思いますが、うまくいかないようです。jar が署名されていないように見えます。all-permissions タグを削除しようとしても、まったく同じ動作になりました。

jar の中を調べたところ、MYKEY.DSA と MYKEY.SF という 2 つの必要なファイルがそこにあることがわかります。読み取り可能なもの (.SF) の中を調べたところ、そこにあるはずのテキストが含まれています。署名するためにjarが必要なのはそれだけだと思います。

だからここに私の質問があります:

1) アプリに関して、.DSA ファイルと .SF ファイルの名前は関係ありますか? 現在、keytool で使用したエイリアスの名前が付けられています。

2) サーバーの Java バージョンが 1.7 で、開発用コンピューターの Java バージョンが 1.6 であることに問題はありますか? 私たちの学校は 1.7 にアップグレードしていないため、1.6 でコンパイルする必要があります。クライアント コンピューターで実行する場合は 1.6 である必要があります。

3) jarsigner を端末から実行したときに、使用している jarsigner のバージョンを特定する方法はありますか? jarsigner -version を試しましたが、それはオプションの 1 つではありません。MYKEY.SF ファイルの上部が次のようになっていることに気付きました。

    Signature-Version: 1.0
    Created-By: 1.4.2-02 (Blackdown Java-Linux Team)
    SHA1-Digest-Manifest: OHMs6w/CQlG3MVYNxC7l1vTWdZw=

    Name: org/arps/tranz/TranzActionMap.class
    SHA1-Digest: dSI3RKfgUrRHbwnZLyXbkiJLWdU=

これは、実際には古いバージョンの jarsigner が実行されているということですか? Java 1.4 がまだ私のコンピューターにあるとは思いませんでした。いずれにせよ、私のバージョンの jarsigner は、次のように同じ種類のファイルを作成するようです。

http://docs.oracle.com/javase/tutorial/deployment/jar/intro.html

1.6 jarsigner または 1.7 jarsigner によって作成されたファイルの外観が異なるかどうか、または問題があるかどうかはわかりません。

4) jarsigner のバージョンが原因である場合、端末 (Ubuntu) から新しいバージョンの jarsigner を強制的に実行するにはどうすればよいですか?

ご協力いただきありがとうございます。最初に言ったように、私はアマチュア プログラマーです。私が本当にやりたいことは、来週のクラスの準備をすることだけです.

アップデート:

libjli.so を見つけることができなかった jar ツールでかなりの時間苦労した後、MYKEY.SF ファイルの上部が次のようになるように、1.6 jar ツールと jarsigner ツールを使用することに成功しました。

    Signature-Version: 1.0
    SHA1-Digest-Manifest-Main-Attributes: DGUFMaJYirZi//67NI+M5RVi63k=
    Created-By: 1.6.0_03 (Sun Microsystems Inc.)
    SHA1-Digest-Manifest: ZPS3aOyPW/tymxbGdfe4/qBVK/g=

ただし、ユーザーに証明書の受け入れを求めることなくアプリが起動し始めるという同じ動作が引き続き発生します。だから今、私の主な質問は次のとおりです。

サーバーが 1.7 を実行しているときに、jar が 1.6 で作成されたことは重要ですか?

サーバー上で実際にどの程度のJavaアクティビティが発生するかはわかりません。ある時点で、クライアント コンピューターに切り替わりますが、jnlp の一部が最初にサーバー上で発生すると想定しています。

4

1 に答える 1