< 目次

アプリケーション開発時の考慮点

このセクションでは、次のトピックについて説明します。

Webデプロイメントの概要

Java Web Startでデプロイ可能なアプリケーションを開発する方法は、Java Platform, Standard Edition向けのスタンドアロン・アプリケーションを開発する方法と、基本的には同じです。 たとえば、アプリケーションのエントリ・ポイントは標準のpublic static void main(String[] argv)です。

ただし、webデプロイメントをサポートするには - アプリケーションの自動ダウンロードおよび起動 - また、アプリケーションをセキュアなサンドボックスで実行できるようにするために、次のような追加の考慮事項があります:

JARファイルからのリソースの取得

Java Web StartによってWebサーバーからクライアント・マシンに転送されるのは、JARファイルだけです。 また、JARファイルをローカル・マシン上のどこに格納するかも判断されます。 したがって、イメージや設定ファイルといったリソースへのディスク相対参照を、アプリケーション内で使用することはできません。

すべてのアプリケーション・リソースは、JNLPファイルのresourcesセクションに指定されたJARファイルから取得するか、WebサーバーへのHTTP要求を通じて明示的に取得する必要があります。 JARファイル内にリソースを格納することをお薦めします。というのも、それらのリソースは、Java Web Startによってローカル・マシン上にキャッシュされるからです。

次のコード例は、JARファイルからイメージを取り出す方法を示したものです。

// Get current classloader
ClassLoader cl = this.getClass().getClassLoader();
// Create icons
Icon saveIcon  = new ImageIcon(cl.getResource("images/save.gif"));
Icon cutIcon   = new ImageIcon(cl.getResource("images/cut.gif"));
...

この例では、アプリケーションのJARファイルのいずれかに、次のエントリが存在することを前提にしています。

images/save.gif
images/cut.gif

JNLP APIを使用したクライアントへのアクセス

JNLP APIを使用して、クライアントのファイル・システムなどのリソースにアクセスできます。 JNLPI APIを使用してクライアントにアクセスする方法の詳細については、次のトピックを参照してください。

セキュリティとコード署名

Java Web Startは、次のセキュリティ上の問題に対応しています。

Java Web Startで起動されたアプリケーションはデフォルトで、制限された環境内で実行されます。このため、記憶装置やローカル・ネットワークなど、ローカルのコンピューティング・リソースへのアクセスが制限されます。

Java Web Startがサポートするもう1つのセキュリティ機能は、デジタル・コード署名です。 起動対象のアプリケーションが1つ以上の署名付きJARファイルとして配信された場合、Java Web Startは、それらのJARファイルの内容が署名後に変更されていないかどうか検証します。 デジタル署名の検証に失敗した場合、そのアプリケーションは第三者によって改ざんされた可能性があるため、Java Web Startはアプリケーションの実行を中止します。

コード署名のサポートは、ユーザーとアプリケーション・サービス・プロバイダの双方にとって重要です。 このサービスを使えば、ユーザーは、アプリケーションの提供元が信頼できるかどうかを検証できます。 また、ユーザーによって信頼された署名付きのアプリケーションは、ローカル・ディスクへのアクセスなど、追加のシステム権限を要求することもできます。

Java Web Startは、アプリケーションを起動する前に、署名者の証明書に基づいて、アプリケーションの提供元を示すダイアログ・ボックスを表示します。 これにより、ユーザーは、ダウンロードしたコードに追加の特権を付与するかどうかについて情報に基づいた決定を下すことができます。

JNLPファイルに次の設定を含めることにより、アプリケーションはすべてのJARファイルが署名されている場合、クライアント・システムへのフル・アクセスをリクエストできます:

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

Java Web Startでのコード署名の実装は、Java Platform Standard EditionのセキュリティAPIに基づいています。

開発者は、Javaアプレットと同じ方法でJava Web Startで使用するコードに署名 - Java Platform, Standard Editionの標準jarsignerツールを使用します。 jarsignerツールのマニュアルでは、コードの署名方法とテスト証明書の作成方法の具体例を示すとともに、署名に関するその他の問題について説明しています。

テスト証明書によるJARファイルの署名

テストの目的で、自己署名証明書を使用してJARファイルに署名することができます。 プロダクションでは、信頼できる認証局によって発行されたコード署名証明書を使用します。

次に、自己署名テスト証明書を使用してJARファイルに署名するステップを示します。

  1. keytoolおよびjarsigner ツールのロケーションがパスにあることを確認します。 これらのツールは、JDK binディレクトリにあります。

  2. 新しいkeystore内に新しいキーを作成します。次のようにします。

    keytool -genkey -keystore myKeystore -alias myself

    パスワードや名前など、新しいキーに関する情報の入力を求められます。 これにより、ディスクにmyKeystoreファイルが作成されます。

  3. 次のように自己署名テスト証明書を作成します:

    keytool -selfcert -alias myself -keystore myKeystore

    これによって、パスワードの入力を求められます。 証明書の生成には数分かかります。

  4. すべてが正常であることを確認します。 キーストアの内容を一覧表示するには、次のコマンドを使用します。

    keytool -list -keystore myKeystore

    出力は次のようになります。

    Keystore type: jks
    Keystore provider: SUN
    
    Your keystore contains 1 entry:
    
    myself, Tue Jan 23 19:29:32 PST 2001, keyEntry,
    Certificate fingerprint (MD5):
    C2:E9:BF:F9:D3:DF:4C:8F:3C:5F:22:9E:AF:0B:42:9D
    
  5. 次のようにテスト証明書を使用してJARファイルに署名します:

    jarsigner -keystore myKeystore test.jar myself

    このステップを、すべてのJARファイルに対して繰り返します。

    自己署名テスト証明書はあくまでも内部テスト専用であることに注意してください。この証明書はユーザーの身元を保証できず、信頼性に欠けるためです。 アプリケーションを本番環境に移す際には、VeriSignThawteなどの認証局から信頼できる証明書を取得し、それを使用するようにしてください。

自己署名テスト証明書を使用して署名されたアプリケーションを実行するには、アプリケーションを実行するコンピュータで次のいずれかを実行します。

JNLPファイルのエンコード方式

JNLPファイルをJava Platform、Standard Editionでサポートされている任意の文字エンコーディングでエンコードします。 サポートされているエンコーディングのリストは、「サポートされるコード」を参照してください。

JNLPファイルをエンコードするには、そのファイルのXML prologでエンコーディングを指定します。 たとえば、次の行は、JNLPファイルをUTF-16でエンコードすることを示しています。

<?xml version="1.0" encoding="utf-16"?>

XML prologそのものは、UTF-8でエンコードする必要があります。

HTTPS証明書の動的ダウンロード

Java Web Startでは、ブラウザと同様の方法で証明書が動的にインポートされます。 これを実現するために、Java Web Startは、java.protocol.handler.pkgsシステム・プロパティを使用して独自のHTTPSハンドラを設定し、SSLSocketFactoryおよびHostnameVerifierのデフォルトを初期化します。 デフォルトの設定には、HttpsURLConnection.setDefaultSSLSocketFactory HttpsURLConnection.setDefaultHostnameVerifierが使用されます。

アプリケーション内でこれら2つのメソッドが使用されている場合、Java Web StartのHTTPSハンドラの初期化後にそれらのメソッドを呼び出すようにしてください。そうしないと、アプリケーションのカスタム・ハンドラが、Java Web Startのデフォルト・ハンドラで置き換えられてしまいます。 次のいずれかを実行して、カスタマイズした独自のSSLSocketFactoryおよび HostnameVerifierが使用されていることを確認できます:

  1. 独自のHTTPSハンドラをインストールします(これにより、Java Web StartのHTTPSハンドラが完全に置き換えられます)。
  2. HttpsURLConnection.setDefaultSSLSocketFactoryまたは HttpsURLConnection.setDefaultHostnameVerifierをコールするのは、最初にJava Web Start HTTPSハンドラ初期化コードを実行する最初の HttpsURLConnectionオブジェクトが作成された後のみです。

webサーバーにJava Web Startアプリケーションをデプロイするプロセスを簡略化するダウンロード・サーブレットの作成、および拡張機能の提供の詳細は、「JnlpDownloadServletガイド」を参照してください。


Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved.