Java Web Start Tips

作成手順

  1. アプリケーションを作成します。
  2. アプリケーションをJarにまとめ、署名します。
  3. アプリケーション用のJNLPファイルを作成します。
  4. アプリケーションをWebサーバ上に配置します。
  5. WebページからJNLPファイルへのリンクを作成します。

1. アプリケーションを作成します。

  1. main()メソッドから起動するアプリケーションを作成します。

2. アプリケーションをJarにまとめ、署名します。

  1. アプリケーションはJarで配布されるため、Jarファイルにします。
  2. Java Web Startはディスクやネットワークなどの ローカルのコンピューティングリソースへのアクセスが制限されます。 アプリケーションがシステムに対する無制限のアクセス権を取得できるようにするには、 デジタル署名が必要です。

デジタル署名の仕方

  1. 暗号鍵と証明書の生成

    暗号鍵と証明書は「keystoreファイル」と呼ばれるファイルにまとめて保存されます。

    keystoreファイルは、keytool.exeを実行し作成します。 (JDKのbinディレクトリに配置されています。)

    実行例:

    > keytool -genkey -keystore [keystoreファイル名] -alias [エイリアス名]
    
    キーストアのパスワードを入力してください:
    新規パスワードを再入力してください:
    姓名を入力してください。
      [Unknown]:  Vtec Tarou
    組織単位名を入力してください。
      [Unknown]:  Virtual Technology
    組織名を入力してください。
      [Unknown]:  Virtual Technology
    都市名または地域名を入力してください。
      [Unknown]:  Tokyo
    州名または地方名を入力してください。
      [Unknown]:  Minato-ku
    この単位に該当する 2 文字の国番号を入力してください。
      [Unknown]:  JP
    CN=Vtec Tarou, OU=Virtual Technology, O=Virtual Technology, L=Tokyo, ST=Minato-k
    u, C=JP でよろしいですか?
      [no]:  yes
    
    <[エイリアス名]> の鍵パスワードを入力してください。
            (キーストアのパスワードと同じ場合は RETURN を押してください):     
    
  2. 暗号鍵と証明書が生成されたことの確認

    実行例:

    > keytool -list -v -keystore [keystoreファイル名]
    
    キーストアのパスワードを入力してください:
    
    キーストアのタイプ: JKS
    キーストアのプロバイダ: SUN
    
    キーストアには 1 エントリが含まれます。
    
    別名: [エイリアス名]
    作成日: 2008/06/04
    エントリタイプ: PrivateKeyEntry
    証明連鎖の長さ: 1
    証明書[1]:
    所有者: CN=Vtec Tarou, OU=Virtual Technology, O=Virtual Technology, L=Tokyo, ST=
    Minato-ku, C=JP
    発行者: CN=Vtec Tarou, OU=Virtual Technology, O=Virtual Technology, L=Tokyo, ST=
    Minato-ku, C=JP
    シリアル番号: 4845e924
    有効期間の開始日: Wed Jun 04 10:00:20 JST 2008 終了日: Tue Sep 02 10:00:20 JST 2
    008
    証明書のフィンガープリント:
             MD5:  6D:53:AF:96:84:DE:DF:DA:E1:4D:BD:09:25:A1:E5:5A
             SHA1: 09:40:87:48:25:73:CF:A9:4C:40:EE:A6:8B:9B:DE:F9:30:A0:36:C1
             署名アルゴリズム名: SHA1withDSA
             バージョン: 3
    
    拡張:
    
    #1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: 3D B4 F3 42 B0 99 3B 10   3C D6 20 75 39 1C CD 73  =..B..;.<. u9..s
    0010: 1B 6F 9C BE                                        .o..
    ]
    ]
    
    
    
    *******************************************
    *******************************************
    
  3. Jarファイルへの署名

    作成した暗号鍵を使用してJarファイルへ署名するには、jarsigner.exeを実行します。 (JDKのbinディレクトリに配置されています。)

    実行例:

    > jarsigner -keystore [keystoreファイル名] [jarファイル名] [エイリアス名]
      
    キーストアのパスワードを入力してください:
    [エイリアス名] の鍵パスワードを入力してください:
    
    警告:
    署名者の証明書は 6 か月以内に期限切れになります。
    
  4. Jarファイルへの署名がされたことの確認

    実行例:

    > jarsigner -verify -keystore [keystoreファイル名] [jarファイル名] [エイリアス名]
    
    jar が検証されました。
    
    警告:
    この jar には、署名者の証明書が 6 か月以内に期限切れとなるエントリが含まれています。
    
    詳細については -verbose および -certs オプションを使用して再実行してください。
    

3. アプリケーション用のJNLPファイルを作成します。

  1. <resources><jar>タグに、アプリケーションのJarファイル名を記述します。
  2. <application-desc>タグに、初期起動させるmain()メソッドのあるクラス名を記述します。
  3. <security>タグに<all-permissions/>タグを指定することで、 アプリケーションがシステムに対する無制限のアクセス権を取得できます。

    サンプル

    <?xml version="1.0" encoding="utf-8"?>
    <jnlp 
     spec="1.0+" 
     codebase="http://localhost:8080/test/" 
     href="jwssample.jnlp">
    
     <information> 
       <title>sample JWS</title> 
       <vendor>vtec</vendor> 
       <homepage href="http://localhost:8080/test/jwssample.html"/>
       <description>Java Web Start Sample Application</description>
       <offline-allowed/> 
     </information> 
    
     <resources> 
       <j2se version="1.4+"/> 
       <jar href="jwssample.jar"/>
    
       <property name="user.language" value="jp"/>
     </resources> 
    
     <application-desc main-class="sample.main.SampleMain"/> 
    
     <security>
       <all-permissions/>
     </security>
    
    </jnlp>
    

4. アプリケーションをWebサーバ上に配置します。

  1. WebサーバにJNLPファイルのMIMEタイプを登録します。
  2. アプリケーションのJarファイルと、JNLPファイルを配置します。

5. WebページからJNLPファイルへのリンクを作成します。

リンクを実行したときの動き

  1. JNLPファイルに定義されたjarファイルがダウンロードされます。
  2. JNLPファイルに定義されたクラスのmain()メソッドが起動します。
  3. セキュリティ上問題がある場合、Jarファイルにデジタル署名をしていれば ユーザに実行の可否を問います。OKであれば処理を続行します。