Java Web Start

編集者:Terai Atsuhiro
作成日:2003-12-11
更新日:2010-01-26 (Tue) 05:16:36

Java Web Start とは

Java Web Start*1を利用すると、Web ブラウザで1回クリックするだけでフル装備のアプリケーションを起動できます。複雑なインストール作業なしで、フル機能のスプレッドシートプログラムやインターネットチャットクライアントなどをダウンロードおよび起動できます。

Java Web Startより引用

security

デフォルトでは、Java Web Start から起動されるクライアントJavaアプリケーションは、安全な限定的環境で実行されるようになっています。 その環境の中では、以下のような禁止事項があります。

  • ローカル・ファイルへのアクセスは禁止
  • 他のコンピューターへのネットワーク接続などが禁止

JNLP API

JNLP API の FileOpenService を使用すると、証明書などを用意しなくても、ユーザがFileChooserで指定したローカルファイルだけを読み書きすることができます。

Java Tutorial にある JWSFileChooserDemo を実行してみてください。

http://terai.xrea.jp/data/jws/security3.png

ローカル・マシンに対する完全アクセス

ローカル・マシンに対する完全アクセスを得る場合は次の2点が必要です。

  • セキュリティ証明書ですべてのJARファイルに署名する
  • JNLPファイルに"all-permissions" を指定する

以下では、自分で自分自身を証明しているテスト用の証明書(オレオレ証明書)を作って説明します。信頼できるセキュリティ証明書は、ちゃんとした証明書発行機関*2から取得してください。

デジタル署名

  1. JARファイルの作成

    まず、JARファイルを作ります。Ant(Jarファイルの作成)なども参考にしてください。

    jar cf Test.jar Test.class
  2. キーストア(セキュリティ証明書)の作成

    次に、キーストア(証明書を保持するデータベース)を作ります。

    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>
  3. 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>要素を指定すれば、起動はできるようになりますが、上記サンプルで作成したのが自己証明書なのでセキュリティ警告ダイアログが出ます。

サンプルアプリケーション

上記のサンプルを起動すると、セキュリティ警告がでます。

  • http://terai.xrea.jp/data/jws/security1.png
  • http://terai.xrea.jp/data/jws/security2.png

証明書の詳細をクリックすると以下のような証明書情報が表示されます。

  • http://terai.xrea.jp/data/jws/info.png

先に述べたように、自分で自分を証明しているだけなので、信頼できない団体から発行されていると警告されています*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

参考リンク


コメント



*1 Java アプリケーションの配備を簡素化するテクノロジ
*2 認証局、CA
*3 開始を押すとJFileChooserなどが使えるようになりますが、自己責任でお願いします