Java Plug-in での RSA 署名付きアプレットの検証動作



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

はじめに

このページでは、Java Plug-in で RSA 署名付きアプレットサポートを実装する方法の概要を説明します。RSA 署名付きアプレットの使用方法の概要については、「Java Plug-in での RSA 署名付きアプレットの配備方法」を参照してください。

RSA 検証のサポート

Plug-in がブラウザに依存しない方法で RSA 署名を検証できるようにするため、暗号化サービスプロバイダ (CSP) が Plug-in にバンドルされることになりました。 CSP では「MD2withRSA」、「MD5withRSA」、および「SHA1withRSA」デジタル署名アルゴリズムがサポートされています。 これは、PluginClassLoader の静的な初期化子の一部として、Java 暗号化アーキテクチャフレームワークに自動的に登録されます。

動的信頼性管理のサポート

Java 2 SDK, Standard Edition v 1.3 では、以下に示すように、「コードベース」および「保護ドメイン」に基づく詳細なアクセス制御が導入されました。

JAR ファイルからロードされる各クラスは、コードソースを保持します。コードソースには、2 つの情報がカプセル化されます。

  1. クラスの呼び出し元の位置 (URL)
  2. 証明書に署名したプリンシパルのリスト

コードソース内の各署名者のプリンシパルは、X.509 公開鍵証明書およびサポートする証明連鎖により表されます。

さらに、クラスローダによりロードされる各クラスは、コードソース (つまり、クラスの出所および署名者) に基づき、1 つの保護ドメインにだけ所属します 。 各保護ドメインは、構成済みのセキュリティポリシーに基づき、関連付けられたアクセス権のセットを保持します。 これは、保護ドメインが次の 2 つをカプセル化することを意味します。

  1. コードソース
  2. 付与されたアクセス権のセット

証明連鎖は、階層的に順序付けられた公開鍵証明書のリストです。これは、署名者の公開鍵証明書で始まり、ルート証明書発行局 (ルート CA) で終わります。 連鎖内のある証明書の公開鍵は、連鎖内の前の証明書に含まれる署名の検証に使用されます。 ルート CA の証明書は、自己署名証明書です。 ルート CA はよく知られており広く公開されているので信頼性が高いものとされています。

PluginClassLoader は、構成済みのセキュリティポリシーをチェックして、特定のコードソースに付与するアクセス権を決定します。 次に、コードソースとそれに付与されるアクセス権が保護ドメインを形成します。 この動作は、セキュリティ保護されたクラスローダ (java.security.SecureClassLoader のインスタンス) すべてに共通です。 (注: sun.plugin.security.PluginClassLoader は、java.net.URLClassLoader のサブクラスである sun.applet.AppletClassLoader を継承します。一方、java.net.URLClassLoaderjava.security.SecureClassLoader を継承します。)

PluginClassLoader は、次の補足的な作業も実行します。 アプレットが署名付きであり、それに付与されたアクセス権が特別な usePolicy アクセス権を含まない場合、PluginClassLoader がアプレットのコードソースから署名者 (および署名者のサポートする証明連鎖) を抽出し、それらの検証を行います。

Plug-in が証明連鎖をルート CA 証明書まで検証可能な場合、ルート CA 証明書が、信頼できるルート CA 証明書のデータベースに含まれるかどうかを確認できます。 ルート CA 証明書がデータベースに含まれる場合、Plug-in は認証された署名者の証明連鎖を表示して、そのプリンシパルにより署名されたコードに AllPermission を付与するかどうかをユーザに問い合わせます。 AllPermission アクセス権を割り当てられた Java コードはシステムコードと同様に扱われ、システムコードが保持するすべての権限を保持します。 次に、ユーザは、プリンシパルにより署名されたコードに AllPermission を付与するかどうかと、付与する場合はアクセス権の付与を以降のセッションすべてに適用するかそれとも現行のセッションだけに限定するかを選択できます。

(アプレットが署名付きではない場合、または、署名付きのアプレットのアクセス権が usePolicy を含んでいる場合については、「概要 -- アプレットのセキュリティの基本」を参照してください。)

usePolicy アクセス権

システム管理者は、usePolicy という名前のアクセス権 (バージョン 1.3 で導入) を使用して、PluginClassLoader の動作を無効にできます。 usePolicy アクセス権を、構成済みのセキュリティポリシーを使用してコードソースに付与する場合、ユーザへの要求は行われず、セキュリティポリシー内で指定されたアクセス権だけがコードソースに付与されます。