Java Web Start
編集者:Terai Atsuhiro
作成日:2003-12-11
更新日:2010-01-26 (Tue) 05:16:36
Java Web Start とは
Java Web Start*1を利用すると、Web ブラウザで1回クリックするだけでフル装備のアプリケーションを起動できます。複雑なインストール作業なしで、フル機能のスプレッドシートプログラムやインターネットチャットクライアントなどをダウンロードおよび起動できます。
security
デフォルトでは、Java Web Start から起動されるクライアントJavaアプリケーションは、安全な限定的環境で実行されるようになっています。 その環境の中では、以下のような禁止事項があります。
- ローカル・ファイルへのアクセスは禁止
- 他のコンピューターへのネットワーク接続などが禁止
JNLP API
JNLP API の FileOpenService を使用すると、証明書などを用意しなくても、ユーザがFileChooserで指定したローカルファイルだけを読み書きすることができます。
Java Tutorial にある JWSFileChooserDemo を実行してみてください。
ローカル・マシンに対する完全アクセス
ローカル・マシンに対する完全アクセスを得る場合は次の2点が必要です。
- セキュリティ証明書ですべてのJARファイルに署名する
- JNLPファイルに"all-permissions" を指定する
以下では、自分で自分自身を証明しているテスト用の証明書(オレオレ証明書)を作って説明します。信頼できるセキュリティ証明書は、ちゃんとした証明書発行機関*2から取得してください。
デジタル署名
- JARファイルの作成
まず、JARファイルを作ります。Ant(Jarファイルの作成)なども参考にしてください。
jar cf Test.jar Test.class
- キーストア(セキュリティ証明書)の作成
次に、キーストア(証明書を保持するデータベース)を作ります。
keytool -genkey -keystore myKeyStore -alias myAlias
以下のようなことを聞かれます。
C:\TEST\SECURITY>"%JAVA_HOME%\bin\keytool" -genkey -keystore myKeyStore -alias myAlias キーストアのパスワードを入力してください: ********** 姓名を入力してください。 [Unknown]: Terai Atsuhiro 組織単位名を入力してください。 [Unknown]: 組織名を入力してください。 [Unknown]: Hoge 都市名または地域名を入力してください。 [Unknown]: Meguro 州名または地方名を入力してください。 [Unknown]: Tokyo この単位に該当する 2 文字の国番号を入力してください。 [Unknown]: JP CN=Terai Atsuhiro, OU=Sample Team, O=Hoge, L=Meguro, ST=Tokyo, C=JP でよろしいですか? [no]: yes <myAlias> の鍵パスワードを入力してください。 (キーストアのパスワードと同じ場合は RETURN を押してください): C:\TEST\SECURITY> - JARファイルに署名
最後に、JARファイルに署名します。以下はJARファイルに署名するときの、Antターゲットのサンプルです。パスワードを聞かれるので、入力してください。
<fileset dir="${lib.dir}" id="lib.jar.fileset"> <!-- 適当なファイルセットを作る(以下のxslfo.jarなどは例) --> <include name="xslfo.jar"/> <include name="RelaxerOrg.jar"/> </fileset> <target name="sign" depends="init"> <mkdir dir="${build.dir}/lib"/> <copy todir="${build.dir}/lib"> <fileset refid="lib.jar.fileset"/> </copy> <input message="input pass" addproperty="store.pass" /> <signjar keystore="${signjar.keystore}" <!-- myKeyStore --> alias="${signjar.alias}" <!-- myAlias --> storepass="${store.pass}"> <fileset dir="${build.dir}" includes="**/*.jar"/> </signjar> </target>${build.dir}、${signjar.keystore}などの各propertyは、任意の値を設定しておいてください。
jnlpファイル
以下は、セキュリティテスト用のjnlpサンプルです。
<?xml version="1.0" encoding="UTF-8"?> <jnlp spec="1.0+" codebase="http://terai.xrea.jp/data/jws/" href="example.jnlp"> <information> <title>サ:セキュリティのテスト</title> <vendor>てんぷらメモ - terai@libra.club.ne.jp</vendor> <homepage href="http://terai.xrea.jp/JavaWebStart.html" /> <description>Swing Example</description> <description kind="short">example</description> <offline-allowed /> </information> <update check="timeout" policy="always" /> <security> <all-permissions /> </security> <resources> <j2se version="1.4+" /> <jar href="example.jar" main="true" /> </resources> <application-desc main-class="example.MainPanel" /> </jnlp>
もし<security><all-permissions/></security>要素が無い場合、ローカルリソースにアクセスするようなアプリケーションは起動できません。jarなどに署名し、<security>要素を指定すれば、起動はできるようになりますが、上記サンプルで作成したのが自己証明書なのでセキュリティ警告ダイアログが出ます。
サンプルアプリケーション
上記のサンプルを起動すると、セキュリティ警告がでます。
証明書の詳細をクリックすると以下のような証明書情報が表示されます。
先に述べたように、自分で自分を証明しているだけなので、信頼できない団体から発行されていると警告されています*3。以下にソースを置いてあるので、署名の実験をしてみてください。
- ソース
- このソースにキーストア(この例ではmyKeyStore)は入っていません。
証明書のインポート
作成したキーストアから証明書をファイルに書き出します。
C:\TEST>keytool -export -keystore myKeyStore -alias myAlias -file example.cer キーストアのパスワードを入力してください: ********** 証明書がファイル <example.cer> に保存されました。 C:\TEST\>
%JAVA_HOME%\bin\javaws.exe を起動し、「編集→設定→セキュリティ→証明書」で、上記の証明書ファイル example.cer をインポートします。"alias"とパスワードを聞かれるので、これを入力し、最初から実行すれば、セキュリティ警告が以下のように変わっていることが確認できます。これで、先のサンプルのような署名をしたアプリケーションが確認なしで実行できるようになります。
http:// terai.xrea.jp/data/jws/security2.png
参考リンク
- Java(TM) Web Start
- Java(TM) Web Start(日本語)
- JDK の開発ツール#セキュリティーツール
- javax.jnlp (JNLP API Reference 1.5)
- Unofficial Java Web Start/JNLP FAQ
- Deploying - Java Web Start & JNLP
KeyTool GUIJava Key 実験場- Javaアプリケーションのテスト用に証明書チェーンを生成
- 無償で正統的なコードサイニング証明書を入手する方法 - 日々是開発: SQS Development
- Deploying Your Rich Internet Application Nice And Easy!
- Avoiding Unnecessary Update Checks
- default:
- jnlp.packEnabled, jnlp.versionEnabled:
- debug
- The 90th percentile: How to debug JWS/JNLP
set JAVAWS_VM_ARGS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n javaws http://terai.xrea.jp/swing/zoom/example.jnlp
- コラム: Java Web Startのリモートデバッグ - SMG
- Java web startアプリケーションをデバッグする(Java6) - Kazzzの日記
"%JAVA_HOME%\bin\java.exe" "-Xbootclasspath/a:%JAVA_HOME%\jre\lib\javaws.jar;%JAVA_HOME%\jre\lib\deploy.jar" -Djnlpx.home="%JAVA_HOME%\jre\bin" -Djnlp.jvm="%JAVA_HOME%\jre\bin\java.exe" -Djava.security.policy="file:%JAVA_HOME%\lib\security\javaws.policy" -DtrustProxy=true -Xverify:remote -Djnlpx.heapsize=NULL,NULL -Djnlpx.vmargs="-classic -Xdebug -Dnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8918" com.sun.javaws.Main "http://terai.xrea.jp/swing/zoom/example.jnlp"
- JaNeLA - The Java Network Launch Anaylzer
- The 90th percentile: How to debug JWS/JNLP
コメント
- メモ: JNLP:JavaWebStartでデスクトップ上に作成したショートカット<アイコンにファイルをドロップすると、そのアプリケーションの起動に失敗し、「このアプリケーションは起動できません」と出る - 日々是開発: SQS Development(2007-12-02) -- terai 2007-12-03 (月) 16:29:46
- メモ:Bug ID: 6646617 Dropping a file on a Java Web Start desktop symbol DELETES the file -- terai 2008-02-22 (金) 19:12:26



