Sun ONE ロゴ     前へ      目次      索引      次へ     
Sun ONE Application Server 7 開発者ガイド



J2EE アプリケーションのセキュリティ

module安全な J2EE アプリケーションを記述する方法について説明します。安全な J2EE アプリケーションには、サーブレットと EJB ビジネスロジックのユーザー認証とアクセス承認を実行するコンポーネントが含まれます。

サーバーの管理セキュリティの詳細は、『Sun ONE Application Server Administrator's Guide to Security』を参照してください。

module次の節があります。

Sun ONE Application Server のセキュリティの目標

企業のコンピューティング環境には、多くのセキュリティ上のリスクがあります。Sun ONE Application Server の目標は、J2EE セキュリティモデルに基づいて、安全性の高い相互利用可能な分散コンポーネントコンピューティング環境を実現することです。Sun ONE Application Server のセキュリティの目標は次のとおりです。

  • J2EE セキュリティモデルへの完全準拠 (詳細は、J2EE 仕様書バージョン 1.3 の第 3 章「Security」を参照)
  • EJB v2.0 セキュリティモデルへの完全準拠 (詳細は、Enterprise JavaBeans 仕様書バージョン 2.0 の第 15 章「Security Management」を参照)。EJB ロールベースの承認も含まれる。
  • Java Servlet v2.3 セキュリティモデルへの完全準拠 (詳細は、Java Servlet 仕様書バージョン 2.3 の第 11 章「Security」を参照)。サーブレットロールベースの承認も含まれる
  • 1 つのセキュリティドメイン内にあるすべての Sun ONE Application Server アプリケーションへの単一サインオンをサポート
  • ACC クライアントのセキュリティをサポート
  • 簡易ファイル、LDAP など、基礎となっている複数の認証領域をサポート。SSL クライアント認証用に、証明書認証もサポートされている。Solaris では、これらに加えて OS プラットフォーム認証もサポートしている
  • Sun ONE Application Server 固有の XML ベースのロールマッピングを利用して宣言型セキュリティをサポート

Sun ONE Application Server 固有のセキュリティ機能

Sun ONE Application Server は、J2EE v1.3 セキュリティモデルだけでなく、次の Sun ONE Application Server 固有の機能をサポートします。

  • 1 つのセキュリティドメイン内にあるすべての Sun ONE Application Server アプリケーションへの単一サインオン
  • プログラムによるログイン

Sun ONE Application Server のセキュリティモデル

安全なアプリケーションでは、クライアントが、有効なアプリケーションユーザーとして認証されていて、サーブレット、JSP、および EJB ビジネスロジックにアクセスすることを承認されている必要があります。Sun ONE Application Server では、Web、ACC、Web サービス、および JMS クライアントのセキュリティをサポートしています。

安全な Web コンテナと安全な EJB コンテナを使用したアプリケーションは、クライアント用に次のセキュリティプロセスを実行できます。

  • 呼び出し側を認証する
  • 呼び出し側に EJB ビジネスメソッドへのアクセスを承認する

次の図に Sun ONE Application Server セキュリティモデルを示します。


この図は、Sun ONE Application Server のセキュリティモデルを示しています。

Web アプリケーションと URL の承認

安全な Web アプリケーションは認証と承認のためのプロパティを持つことができます。Web コンテナは、3 種類の認証タイプ (基本、証明書、およびフォームベース) をサポートしています。ブラウザがメインアプリケーションの URL を要求すると、Web コンテナはユーザー認証情報 (たとえば、ユーザー名とパスワード) を収集し、それを認証用のセキュリティサービスに転送します。

Sun ONE Application Server は Web リソースに関連付けられたセキュリティポリシー (配備記述子から派生する) を調べ、リソースへのアクセスを許可するセキュリティロールを調べます。Web コンテナは各ロールに対してユーザーの証明書をテストし、ロールにユーザーを割り当てることができるかどうかを判断します。詳細は、『Sun ONE Application Server Web アプリケーション開発者ガイド』を参照してください。

エンタープライズ Bean メソッドの呼び出し

ブラウザが Web コンテナによって認証および承認され、JSP が EJB コンポーネントのリモートメソッド呼び出しを実行すると、認証プロセスで収集されたユーザーの証明書は、EJB コンテナへ伝達されます。安全な EJB コンテナには、Bean メソッドにアクセス制御を適用するために使用される承認プロパティを持つ、配備記述子が含まれています。EJB コンテナは、EJB JAR 配備記述子から取得したロール情報を使用して、呼び出し側をロールにマップすることができるかどうか、また、Bean メソッドへのアクセスを許可するかどうかを判断します。詳細は、『Sun ONE Application Server Enterprise JavaBeans 開発者ガイド』を参照してください。

ACC クライアントによるエンタープライズ Bean メソッドの呼び出し

ACC クライアントの場合、安全な EJB コンテナはセキュリティポリシー (配備記述子から取得) を調べて、呼び出し側が Bean メソッドへのアクセス権限を持っているかどうかを判断します。このプロセスは、ACC クライアントおよび Web クライアントで同じです。詳細は、『Sun ONE Application Server Developer's Guide to Clients』を参照してください。

セキュリティ責任の概要

J2EE プラットフォームの主な目標は、セキュリティメカニズムから開発者を解放し、安全なアプリケーションをさまざまな環境に容易に配備できるようにすることです。この目標を達成するには、アプリケーションセキュリティの仕様要件のメカニズムをアプリケーションの外側に明確に設定する必要があります。

アプリケーション開発者

アプリケーション開発者は次の項目に対して責任があります。

  • アプリケーションロールを指定する
  • アプリケーションコンポーネント (サーブレット /JSP および EJB コンポーネント) に対するロールベースのアクセス制限を定義する
  • プログラムによるセキュリティを使用する場合は、ユーザーロールを確認し、これらのロールに基づいて機能へのアクセスを承認する (プログラムによるセキュリティ管理では、コンテナで管理する代わりに、アプリケーション内にセキュリティログインがハードコードされるため、お勧めできません)

アプリケーション編成者

アプリケーション編成者またはアプリケーションコンポーネントプロバイダは、コンポーネントに組み込まれた次のようなセキュリティ関連事項をすべて確認する必要があります。

  • コンポーネントが isCallerInRole または isUserInRole を呼び出すときに使うすべてのロール名
  • コンポーネントがアクセスするすべての外部リソースへの参照
  • コンポーネントが行うすべての内部コンポーネント呼び出しへの参照

アプリケーション配備者

アプリケーション配備者は編成者が提供したすべてのコンポーネントのセキュリティビューを受け取り、それを使用して次のようにアプリケーションにおける特定の企業環境を保護します。

  • ユーザーまたはグループ、あるいはその両方をセキュリティロールに割り当てる
  • コンポーネントメソッドへのアクセスに必要な権限を修正して、特定の配備シナリオの要件に適合させる

セキュリティの一般的な用語

最も一般的なセキュリティプロセスは、認証、承認、レルムの割り当て、およびロールマッピングです。次の節でこれらの用語を定義します。

認証

認証とは、ユーザーを確認することです。たとえば、ユーザーが Web ブラウザ内でユーザー名とパスワードを入力し、その証明書がアクティブなレルム内に保存されているパーマネントプロファイルと一致したとき、ユーザーは認証されます。ユーザーは、それ以降のセッションで使われるセキュリティ ID に関連付けられます。

Sun ONE Application Server の認証に関する詳細は、『Sun ONE Application Server Web アプリケーション開発者ガイド』および『Sun ONE Application Server Developer's Guide to Clients』を参照してください。

承認

認証された後、承認によってユーザーは希望する操作を実行することができます。たとえば、人事管理アプリケーションでは、管理者には社員全員の個人情報を見ることを承認し、社員には自身の個人情報だけを見ることを承認します。

Sun ONE Application Server の認証に関する詳細は、『Sun ONE Application Server Web アプリケーション開発者ガイド』および『Sun ONE Application Server Enterprise JavaBeans 開発者ガイド』を参照してください。

レルム

レルム (J2EE 仕様でセキュリティポリシードメインまたはセキュリティドメインとも呼ばれている) とは、共通のセキュリティポリシーが、セキュリティサービスのセキュリティ管理者によって定義および適用される範囲のことです。Sun ONE Application Server でサポートされているレルムは、fileldapcertificate、および solaris です。レルムの設定方法については、「レルムの設定」を参照してください。

ロールマッピング

クライアントはセキュリティロールによって定義できます。たとえば、会社が社員のデータベースを使用して、社内電話帳アプリケーションと支払給与情報の両方を生成するとします。電話番号と電子メールアドレスには、すべての社員がアクセスできますが、給与情報にアクセスできるのは一部の社員に限られます。給与を表示あるいは変更する権限を持つ社員は、特別なセキュリティロールを持つように定義できます。

ロールはアプリケーション内での役割を定義するのに対し、グループはある方法で関連付けられているユーザーの集まりに過ぎません。この点で、ロールとユーザーグループは異なります。たとえば、astronautsscientists、および場合によっては politicians というグループのメンバーはすべて、SpaceShuttlePassenger のロールに該当します。

EJB セキュリティモデルは、アプリケーション開発者の記述どおりに、特定のドメインとは関係なくロール (ユーザーグループとは区別された) を記述します。グループは配備ドメインに固有です。各アプリケーションまたはモジュール内での 1 つまたは複数のグループへのロールの割り当ては、配備者が決定します。

Sun ONE Application Server では、ロールは、アクティブなレルムに設定されているユーザーまたはグループ (あるいはその両方) に対応しています。

コンテナセキュリティ

コンポーネントコンテナは、J2EE アプリケーションのセキュリティを確保する役目を果たします。コンテナによって確保されるセキュリティ形式には、次の 2 つがあります。

  • プログラムによるセキュリティ
  • 宣言によるセキュリティ

プログラムによるセキュリティ

プログラムによるセキュリティとは、EJB コンポーネントまたはサーブレットが J2EE セキュリティモデルによって指定されたセキュリティ API へのメソッド呼び出しを使用して、呼び出し側またはリモートユーザーのセキュリティロールに基づいて、ビジネスロジックの決定を行うことです。プログラムによるセキュリティは、宣言によるセキュリティ単独ではアプリケーションのセキュリティモデルの要求を十分に満たすことができない場合に使います。

J2EE 仕様書バージョン 1.3 では、プログラムによるセキュリティは、EJBの EJBContext インタフェースの 2 つのメソッドおよびサーブレットの HttpServletRequest インタフェースの 2 つのメソッドで構成されるものと定義されています。Sun ONE Application Server では、この仕様書で示されているように、これらのインタフェースをサポートしています。

プログラムによるセキュリティの詳細は、次を参照してください。

  • J2EE 仕様書バージョン 1.3 の第 3.3.6 節「Programmatic Security」

宣言によるセキュリティ

宣言によるセキュリティとは、アプリケーションのセキュリティメカニズムが、そのアプリケーションの外部で宣言され、処理されることを意味します。配備記述子には、アプリケーションのセキュリティロール、アクセス制御、認証要件など、J2EE アプリケーションのセキュリティ構造が示されています。

Sun ONE Application Server は、J2EE v1.3 が指定する DTD をサポートしており、さらに別のセキュリティ要素が配備記述子に含まれています。宣言によるセキュリティの責任は、アプリケーション配備者にあります。詳細は、「J2EE アプリケーションのアセンブルと配備」を参照してください。

宣言によるセキュリティには、次の 3 つのレベルがあります。

アプリケーションレベルのセキュリティ

アプリケーションの XML 配備記述子 (sun-application.xml) には、アプリケーションのサーブレットおよび EJB コンポーネントにアクセスするときに使用される、すべてのユーザーロール用の承認記述子が含まれています。アプリケーションレベルでは、アプリケーションのコンテナが使用するすべてのロールがこのファイルの role-name 要素のリストに含まれている必要があります。ロール名は、EJB XML 配備記述子 (ejb-jar.xml および sun-ejb-jar.xml ファイル) およびサーブレットXML 配備記述子 (web.xml および sun-web.xml ファイル) の適用対象となります。sun-application.xml ファイルには、アプリケーションで使用される各 role-name にマッチングする security-role-mapping 要素も含まれている必要があります。

Web コンポーネントレベルのセキュリティ

安全な Web コンテナは、サーブレットXML 配備記述子 (web.xml および sun-web.xml ファイル) に記述されているセキュリティポリシーを使用して、ユーザーを認証し、サーブレットまたは JSP へのアクセスを認可します。ユーザーが認証され承認されると、サーブレットはユーザーの証明書を EJB コンポーネントに転送して Bean との安全な関連付けを確立します。

EJB レベルのセキュリティ

EJB コンテナは、EJB XML 配備記述子 (ejb-jar.xml および sun-ejb-jar.xml ファイル) に記述されているセキュリティポリシーを使用して、Bean メソッドへのアクセスを承認する役割を果たします。

セキュリティ情報のガイド

次の種類の各情報を、短い説明、情報の保存場所、情報の作成方法、情報へのアクセス方法、および詳しい情報を参照できる場所とともに示します。

ユーザー情報

ユーザー名、パスワードなどです。

場所

ユーザー情報の場所は、使用されているレルムによって異なります。

  • file レルムの場合は、instance_dir/config ディレクトリ内にあるキーファイルにユーザーおよびグループが含まれている
  • ldap レルムの場合は、外部の LDAP ディレクトリにユーザーおよびグループが格納される
  • certificate レルムの場合は、暗号を使って確認されたクライアント証明書からユーザー ID が取得される
  • solaris の場合は、ユーザーおよびグループは、システムの PAM 設定で指定されているとおりに、基礎となっている Solaris ユーザーデータベース内に格納される

これらの領域の詳細は、「レルムの設定」を参照してください。

作成方法

ユーザーの作成方法およびグループの定義方法は、使用されているレルムに固有のものです。Sun ONE Application Server には、Solaris/PAM または LDAP などの外部レルムのための管理機能はありません。詳細は、Solaris または LDAP のマニュアルを参照してください。

セキュリティロール

アプリケーションの機能を定義するロールで、多数のユーザーまたはグループ、あるいはその両方から構成されます。ユーザーとグループの関係は、使用されている特定の領域の実装によって決定されます。

場所

ロールは、J2EE アプリケーション配備記述子内で定義されます。

作成方法

Sun ONE Application Server の管理インタフェース、または Sun ONE Studio 4 のアプリケーションアセンブリ用および配備用の開発ツールを使います。

アクセス方法

isCallerInRole() を使用してユーザーのロールメンバーシップをテストします。たとえば、次のコードで Manager ロールが securedMethod() にアクセスできる場合は、sctx.isCallerInRole("Manager") を呼び出すと true が返されます。

public class SecTestEJB implements SessionBean
{
   private SessionContext sctx = null;

   public void setSessionContext(SessionContext sc)
   {
      sctx = sc;
   }

   public void securedMethod( )
   {
      System.out.println(  sctx.isCallerInRole( "Manager" ) );
   }
}

レルムの設定

この節には次のトピックがあります。

レルムの設定方法

次の方法のいずれかで領域を設定できます。

管理インタフェースの使用法

管理インタフェースを使用して領域を設定するには

  1. サーバーインスタンスの下の「セキュリティ」コンポーネントを開きます。
  2. 「セキュリティ」コンポーネントの下の「レルム」コンポーネントを開きます。
  3. 「レルム」ページに移動します。
  4. 有効にしたいレルムのチェックボックスをクリックします。レルムの追加と削除は、「新規」および「削除」ボタンを使用しても行うことができます。レルムを編集するときは、そのレルムをクリックします。
  5. レルムを追加または編集するときは、レルムの名前、クラス名、プロパティ、ユーザー (file レルムのみ) を入力し、「了解」または「保存」ボタンを選択します。
  6. 「セキュリティ」ページに移動します。
  7. デフォルトのレルムを選択し、「保存」ボタンを選択します。
  8. サーバーインスタンスのページを表示し、「変更の適用」ボタンを選択します。
  9. サーバーを再起動します。

asadmin コマンドの使用

ローカルサーバー上にレルムを設定するときは、asadmin コマンドを使用することができます。

asadmin create-auth-realm

asadmin create-auth-realm コマンドは、レルムを設定します。構文は次のとおりです。

asadmin create-auth-realm --user admin_user [--password admin_password] [--passwordfile password_file] [--host hostname] [--port adminport] [--secure | -s] [--instance instance_name] --classname realm_class [--property (name=value)[:name=value]*] realm_name

たとえば、次のコマンドは、certificate レルムを設定します。

asadmin create-auth-realm --user jadams --password secret --instance server1 --classname com.iplanet.ias.security.auth.realm.certificate.CertificateRealm certificate

asadmin delete-auth-realm

asadmin delete-auth-realm コマンドは、レルムを無効にします。構文は次のとおりです。

asadmin delete-auth-realm --user admin_user [--password admin_password] [--passwordfile password_file] [--host hostname] [--port adminport] [--secure | -s] [--instance instance_name] realm_name

たとえば、次のコマンドは、certificate レルムを無効にします。

asadmin delete-auth-realm --user jadams --password secret --instance server1 certificate

asadmin list-auth-realms

asadmin list-auth-realms コマンドは、すべてのレルムを一覧表示します。構文は次のとおりです。

asadmin list-auth-realms --user admin_user [--password admin_password] [--passwordfile password_file] [--host hostname] [--port adminport] [--secure | -s] instance_name

たとえば、次のコマンドは、server1 インスタンス内のすべてのレルムを一覧表示します。

asadmin list-auth-realms --user jadams --password secret server1

server.xml ファイルの編集

デフォルトのレルムは、バックグラウンドで、server.xml 内の security-service 要素に設定されます。security-service の設定は、次のようになります。

<security-service default-realm="file" anonymous-role="ANYONE"
      audit-enabled="false">
   <auth-realm name="file"
          classname="com.iplanet.ias.security.auth.realm.file.FileRealm">
      <property name="file" value="instance_dir/config/keyfile"/>
      <property name="jaas-context" value="fileRealm"/>
   </auth-realm>
   ...
</security-service>

default-realm 属性は、サーバーが使用しているレルムを指します。この属性は、設定済みの auth-realm 名のいずれかを指す必要があります。デフォルトは、file レルムです。

audit フラグは、監査情報をログに記録するかどうかを決定します。true に設定すると、サーバーはすべての認証および承認イベントに対する監査メッセージをログに記録します。

レルムの設定を変更した場合は、変更を有効にするためにサーバーを再起動する必要があります。

server.xml ファイルの詳細は、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。

サポートされるレルム

Sun ONE Application Server では、次のレルムがサポートされています。

file

file レルムは、Sun ONE Application Server を最初にインストールした場合のデフォルトのレルムです。このレルムは次のように設定されています。

  • 名前 - file
  • クラス名 - com.iplanet.ias.security.auth.realm.file.FileRealm

必須プロパティは次のとおりです。

  • file - ユーザー情報を格納するファイルの名前。デフォルトでは instance_dir/config/keyfile
  • jaas-context - 値は fileRealm にする必要がある

ユーザー情報ファイルは最初は空のため、ユーザーを追加しなければ file レルムを使用できません。次の方法のいずれかでユーザーを設定できます。

管理インタフェースの使用法

管理インタフェースを使って file レルムのユーザーを設定するには、次の手順に従います。

  1. サーバーインスタンスの下の「セキュリティ」コンポーネントを開きます。
  2. 「セキュリティ」コンポーネントの下の「レルム」コンポーネントを開きます。
  3. 「file」ページに移動します。
  4. 「ユーザーを管理」ボタンをクリックします。
  5. ユーザーを新たに追加するときは、「新規」ボタンをクリックします。ユーザーの情報を変更するときは、表示されているユーザー名をクリックします。どちらの場合も次の情報を入力します。
    • ユーザー ID (新規の場合に必要) - ユーザーの名前
    • パスワード (必須) - ユーザーのパスワード
    • パスワードの再入力 (必須) - ユーザーのパスワードの確認用再入力
    • グループリスト (オプション) - ユーザーが属するグループのコンマで区切られたリスト

  6. 「了解」ボタンをクリックします。
  7. サーバーインスタンスのページを表示し、「変更の適用」ボタンを選択します。
  8. サーバーを再起動します。

asadmin コマンドの使用

asadmin create-file-user コマンドは、file レルムにユーザーを 1 つ作成します。構文は次のとおりです。オプションパラメータにデフォルト値がある場合は、その値を表示しています。

asadmin create-file-user --user admin_user [--password admin_password] [--passwordfile password_file] [--host localhost] [--port 4848] [--secure | -s] [--instance instance_name] [--userpassword user_password] [--groups user_group[:user_group]*] user_name

たとえば、次のコマンドは dsanchez というユーザーを file レルムに追加し、ユーザーのパスワードを secret に設定します。jadamstopsecret は、管理者の名前とパスワードです。

asadmin create-file-user --user jadams --password topsecret --userpassword secret dsanchez

asadmin delete-file-user コマンドは、file レルムからユーザーを 1 つ削除します。構文は次のとおりです。オプションパラメータにデフォルト値がある場合は、その値を表示しています。

asadmin delete-file-user --user admin_user [--password admin_password] [--passwordfile password_file] [--host localhost] [--port 4848] [--secure | -s] [--instance instance_name] user_name

たとえば、次のコマンドは file レルムから dsanchez というユーザーを削除します。jadamstopsecret は、管理者の名前とパスワードです。

asadmin delete-file-user --user jadams --password topsecret dsanchez

asadmin update-file-user コマンドは、file レルムの 1 つのユーザーの情報を変更します。構文は次のとおりです。オプションパラメータにデフォルト値がある場合は、その値を表示しています。

asadmin update-file-user --user admin_user [--password admin_password] [--passwordfile password_file] [--host localhost] [--port 4848] [--secure | -s] [--instance instance_name] [--userpassword user_password] [--groups user_group[:user_group]*] user_name

たとえば、次のコマンドはユーザーのパスワードを dsanchez から private に変更します。jadamstopsecret は、管理者の名前とパスワードです。

asadmin update-file-user --user jadams --password topsecret --userpassword private dsanchez

asadmin list-file-users コマンドは、file レルムのユーザーをリスト表示します。構文は次のとおりです。オプションパラメータにデフォルト値がある場合は、その値を表示しています。

asadmin list-file-users --user admin_user [--password admin_password] [--passwordfile password_file] [--host localhost] [--port 4848] [--secure | -s] instance_name

たとえば、次のコマンドは server1 インスタンスの file レルムに含まれるユーザーをリスト表示します。jadamstopsecret は、管理者の名前とパスワードです。

asadmin list-file-users --user jadams --password topsecret server1

asadmin list-file-groups コマンドは、file レルムのグループをリスト表示します。構文は次のとおりです。オプションパラメータにデフォルト値がある場合は、その値を表示しています。

asadmin list-file-groups --user admin_user [--password admin_password] [--passwordfile password_file] [--host localhost] [--port 4848] [--secure | -s] [--name user_name] instance_name

たとえば、次のコマンドは dsanchez というユーザーの file レルムグループをリスト表示します。jadamstopsecret は、管理者の名前とパスワードです。

asadmin list-file-users --user jadams --password topsecret --name dsanchez server1

ldap

ユーザーセキュリティ情報の LDAP データベースを使うときは、ldap レルムを使います。このレルムは次のように設定されています。

  • 名前 - ldap
  • クラス名 - com.iplanet.ias.security.auth.realm.ldap.LDAPRealm

必須プロパティは次のとおりです。

  • directory - 使用しているサーバーの LDAP URL
  • base-dn - ユーザーデータの場所のベース DN。ツリー範囲検索が実行されるため、このベース DN は、ユーザーデータのレベルより上に置かれる。検索ツリーが小さければ小さいほど、パフォーマンスは良くなる
  • jaas-context - 値は ldapRealm にする必要がある

LDAP 領域の動作を調整するために、オプションで、次のプロパティを追加できます。

  • search-filter - ユーザーを見つけるために使用する検索フィルタ。デフォルトは、uid=%s (%s はサブジェクト名に展開される)
  • group-base-dn - グループデータの場所のベース DN。デフォルトでは、base-dn と同じ。ただし、必要に応じて変更できる
  • group-search-filter - ユーザーのグループメンバーシップを検索するために使用する検索フィルタ。デフォルトは、uniquemember=%d (%d はユーザー要素 DN に展開される)
  • group-target - グループ名エントリを含む LDAP の属性名。デフォルトは、CN
  • search-bind-dn - search-filter 検索を実行するディレクトリの認証に使用するオプション DN。匿名検索を実行できないディレクトリだけで必要とされる
  • search-bind-password - search-bind-dn で指定した DN の LDAP パスワード

必要なユーザーを LDAP ディレクトリに作成する必要があります。作成は、「Users & Groups」メインタブの Sun ONE Directory Server コンソールで行うか、LDAP とディレクトリスキーマをサポートするほかの管理ツールを使用して行うことができます。

配備記述子内で使用される principal-name は、LDAP ユーザー情報に対応している必要があります。

certificate

certificate レルムは、SSL 認証をサポートしています。certificate レルムでは、Sun ONE Application Server のセキュリティコンテキストにユーザー ID が設定され、クライアント証明書からユーザーデータがそのユーザー ID に入力されます。その後、J2EE コンテナは、証明書からの各ユーザーの DN に基づいて、承認処理を行います。このレルムは次のように設定されています。

  • 名前 - certificate
  • クラス名 - com.iplanet.ias.security.auth.realm.certificate.CertificateRealm

certificate レルムの動作を調整するために、オプションで、次のプロパティを追加できます。

  • assign-groups - このプロパティを設定すると、値は各グループ名がコンマで区切られたリストとなる。有効な証明書を持つすべてのクライアントには、これらのグループのメンバーシップが割り当てられ、Web コンテナと EJB コンテナの承認に使用される

アプリケーションを配備するときは、次のように、web.xml 内に認証メカニズムとして CLIENT-CERT を指定する必要があります。

<login-config>
   <auth-method>CLIENT-CERT</auth-method>
</login-config>

クライアント証明書を取得し、それをブラウザにインストールして、クライアント証明書の認証機能のセットアップを完了する必要があります。サーバーおよびクライアント証明書のセットアップ方法に関する詳細は、『Sun ONE Application Server Administrator's Guide to Security』を参照してください。

次のいずれかの方法で、SSL 認証用にサーバーインスタンスを設定できます。

  • server.xml ファイルの ssl 要素を設定し、サーバーを再起動します。server.xml ファイルの詳細は、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。
  • 次のように管理インタフェースを使用します。
    1. サーバーインスタンスの下の「HTTP サーバー」コンポーネントを開きます。
    2. 「HTTP サーバー」コンポーネントの下の「HTTP リスナー」コンポーネントを開きます。
    3. SSL を設定するリスナーを選択します。
    4. そのリスナー用の「SSL/TLS 設定」を編集します。
    5. 「Save」ボタンを選択します。
    6. サーバーインスタンスのページを表示し、「変更の適用」ボタンを選択します。
    7. サーバーを再起動します。

    詳細は、『Sun ONE Application Server Administrator's Guide to Security』を参照してください。

solaris

solaris レルムでは、Solaris の username+password データを使用して認証を行うことができます。このレルムは Solaris 9 だけでサポートされています。このレルムは次のように設定されています。

  • 名前 - solaris
  • クラス名 - com.iplanet.ias.security.auth.realm.file.SolarisRealm

必須プロパティは次のとおりです。

  • jaas-context - 値は solarisRealm にする必要がある


  • solaris レルムは、認証のために基礎となる PAM インフラストラクチャを呼び出します。PAM モジュールの設定が root 権限を必要とする場合は、このレルムを使用するには root としてインスタンスを実行する必要があります。詳細は、『Solaris のシステム管理 (セキュリティサービス)』の「認証サービスの使用 (手順)」の章を参照してください。

    Solaris は、リソースへのアクセスを制御する RBAC (Role Based Access Control) という拡張メソッドをサポートしています。Sun ONE Application Server の管理コマンドには RBAC が含まれます。詳細は、『Solaris のシステム管理 (セキュリティサービス)』の「役割によるアクセス制御 (概要)」の章を参照してください。



カスタムレルムの作成

JAAS (Java Authentication and Authorization Service) ログインモジュールとレルムの実装を用意することで、カスタムレルムを作成できます。クライアントサイドの JAAS ログインモジュールは、Sun ONE Application Server には適していません。JAAS に関する詳細は、次のサイトで Java 2 SDK, v 1.4 用の JAAS 仕様書を参照してください。

http://java.sun.com/products/jaas/

カスタムレルムを使用するサンプルアプリケーションは、Sun ONE Application Server の次のディレクトリにあります。

install_dir/samples/security/realms

server.policy ファイル

Sun ONE Application Server の各インスタンスは、instance_dir/config ディレクトリに、専用の J2SE 標準ポリシーファイルを持っています。ファイル名は、server.policy です。

Sun ONE Application Server 7 は J2EE 1.3 に準拠したアプリケーションサーバーです。J2EE 仕様の推奨や要件に従っているため、ポリシーを適用する Java コンポーネントであるセキュリティマネージャを装備し、J2EE アプリケーションコードへのアクセス権は限定されています。

この節には次のトピックがあります。

デフォルトのアクセス権

内部サーバーコードにはすべてのアクセス権が付与されています。これは、サーバーインフラストラクチャコードの各種部分に AllPermission 付与ブロックを加えることで適用されています。このエントリを変更しないでください。

デフォルトの付与ブロックにはアプリケーションのアクセス権が付与されています。このアクセス権は、前述の内部サーバーコードの一部ではなく、すべてのコードに適用されます。Sun ONE Application Server 7 は、EJB モジュールと Web モジュールのアクセス権を区別しません。すべてのコードには、Web コンポーネントのアクセス権の最小セット (EJB の最小セットの上位集合) が付与されます。

server.policy ファイルには、最小セットのほかに少数のアクセス権が付与されています。これは、サーバー実装の各種内部依存に対応するために必要なアクセス権です。J2EE アプリケーションの開発者は、これらの追加アクセス権に依存した開発はするべきではありません。

コネクタを使用するためにアクセス権が 1 つ追加されています。特定のサーバーインスタンスでコネクタを使用しない場合は不要なので、このアクセス権を削除することをお勧めします。

アプリケーションのアクセス権の変更

各インスタンスのデフォルトポリシーは、配備された J2EE アプリケーションのアクセス権を、アプリケーションが正しく動作するのに最低限必要なアクセス権に制限しています。このデフォルトのアクセス権以上のアクセス権を必要とするアプリケーションを開発している場合は、server.policy ファイルを編集して、そのアプリケーションに必要なカスタムのアクセス権を追加します。

サーバーインスタンスに配備するすべてのアプリケーションではなく、追加が必要なアプリケーションだけに適切なアクセス権を追加します。デフォルトセット (すべてのコードに適用される、コードベースを持たない付与ブロック) にアクセス権を追加しないでください。その代わりに、アクセス権の追加が必要なアプリケーションには、コードベースを持つ新しい付与ブロックを追加します。この付与ブロックにも、必要最小限のアクセス権だけを追加します。



server.policy ファイルには、アプリケーションコード用に java.security.AllPermission を追加しないでください。追加すると、セキュリティマネージャの機能が完全に無効化され、パフォーマンスのオーバーヘッドも伴います。その代わりに、「セキュリティマネージャの無効化」で説明する手順でセキュリティマネージャを無効化してください。



J2EE 仕様に規定されているように、追加したアクセス権に関する説明をアプリケーションに用意する必要があります。アクセス権の追加が必要なアプリケーションで、追加するアクセス権のセットが説明されていない場合は、アプリケーションの作成者に詳細を確認してください。

最後の手段として、サーバーログファイルを開いて AccessControlException を検索し、アプリケーションに必要なアクセス権を調べることもできます。この方法が適さない場合は、サーバーインスタンスに -Djava.security.debug=all JVM オプションを追加します。詳細は、『Sun ONE Application Server 管理者ガイド』または『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。

server.policy ファイルを編集するには、J2SE 標準 policytool、またはテキストエディタを使用します。詳細は、次のサイトを参照してください。

http://java.sun.com/docs/books/tutorial/security1.2/tour2/index.html

server.policy ファイル内に設定するアクセス権の詳細は、次のサイトを参照してください。

http://java.sun.com/j2se/1.4/docs/guide/security/permissions.html

Permission クラスの Javadoc は、次のサイトにあります。

http://java.sun.com/j2se/1.4/docs/api/java/security/Permission.html

セキュリティマネージャの無効化

J2EE アプリケーションコンポーネントの開発者は、セキュリティマネージャを無効にするべきではありません。J2EE 仕様に規定されているように、J2EE アプリケーションはデフォルトセットで実行可能である必要があり、特別な要件についてはコンポーネントに説明を加える必要があります。



J2EE アプリケーションが J2EE のポリシーセットに確実に準拠するには、J2EE 開発者がセキュリティマネージャを無効にしないことが重要です。Sun ONE Application Server 7 にはセキュリティマネージャを無効にするオプションが用意されていますが、このオプションは将来廃止される可能性があります。J2EE のポリシーセットに違反する (および相違点が説明されていない) アプリケーションは、将来のリリースでは実行できないことがあります。



本稼動環境では、次の場合にセキュリティマネージャを安全に無効化することができます。

  • パフォーマンスの影響を受けやすい
  • 本稼動サーバーへの配備が慎重に制御されている
  • 信頼できるアプリケーションだけが配備されている
  • アプリケーションにポリシーを適用する必要がない

一部のアプリケーションでは、セキュリティマネージャを無効化するとパフォーマンスが大きく向上することがあります。セキュリティマネージャを無効にするには、server.xml ファイル内の次のエントリを削除するかコメントアウトします。

<jvm-options>-Djava.security.policy=instance_dir/config/server.policy</jvm-options>

server.xml ファイルの詳細は、『Sun ONE Application Server 管理者用設定ファイルリファレンス』を参照してください。

プログラムによるログイン

プログラムによるログインでは、配備された J2EE アプリケーションによりログインメソッドが呼び出されます。ログインが成功すると、あたかもクライアントが従来のいずれかの J2EE メカニズムを使用して認証したかのように、SecurityContext が確立されます。

プログラムによるログインは、J2EE 標準認証メカニズムを適用できない特別なニーズを持つアプリケーションに有効です。



プログラムによるログインは、Sun ONE Application Server に固有の機能です。他のアプリケーションサーバーには移植できません。



この節には次の項目があります。

対策

Sun ONE Application Server は、ログイン情報 (userpassword) が配備アプリケーションによってどのように取得されるかということには関与していません。プログラムによるログインを使用する場合、セキュリティ要件を満たすシステムを作成するようアプリケーション開発者に責任が課せられます。アプリケーションコードがネットワーク上の認証情報を読み込む場合、ユーザーを信用するかどうかの判断はそのアプリケーションに委ねられます。

プログラムによるログインを使用する場合、アプリケーション開発者は、アプリケーションサーバーでサポートされている認証メカニズムを使用せずに、セキュリティサービスに直接認証データを渡すことができます。この機能は、柔軟性がありますが、セキュリティに関する事項を十分理解した上で使用してください。

このメカニズムは、コンテナ管理認証プロセスおよびシーケンスを迂回するため、アプリケーション開発者は、制限されたリソースまたはメソッドにアクセスするときはその前に必ず認証が確立されるようにする必要があります。ログイン試行の状態を確認し、それに応じてアプリケーションの動作を変更することも、アプリケーション開発者の責任です。

プログラムによるログインの状態は、必ずしも複数のセッションにわたって持続したり、シングルサインオンに関係しているわけではありません。

遅延認証は、プログラムによるログインではサポートしていません。アクセスチェックのときに、配備アプリケーションがプログラムによるログインメソッドを使用して正しく認証していないことが判明した場合は、アクセスはただちに拒否され、また、このような事態に備えてアプリケーションが適切にコーディングされていない場合は、アプリケーションが強制終了することがあります。

プログラムによるログインのアクセス権の付与

アプリケーションに対してプログラムによるログインメカニズムを呼び出すには、ProgrammaticLoginPermission 権が必要です。このアクセス権は標準 J2EE メカニズムではないため、デフォルトでは、配備されたアプリケーションには付与されていません。

必要なアクセス権をアプリケーションに付与するには、instance_dir/config/server.policy ファイルに次の行を追加します。

grant codeBase "file:jar_file_path" {
   permission com.sun.appserv.security.ProgrammaticLoginPermission
   "login";
};

jar_file_path は、アプリケーションの JAR ファイルへのパスです。

server.policy ファイルの詳細は、「server.policy ファイル」を参照してください。

ProgrammaticLogin クラス

com.sun.appserv.security.ProgrammaticLogin クラスを使用すると、ユーザーがプログラムによるログインを実行できます。このクラスには、login メソッドが 2 種類あります。1 つは、サーブレットまたは JSP 用で、もう 1 つは EJB コンポーネント用です。

サーブレットまたは JSP 用のログインメソッドは、次の署名を持ちます。

public Boolean login (String user, String password, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)

EJB 用のログインメソッドは、次の署名を持ちます。

public Boolean login (String user, String password)

どちらの login メソッドも、次の処理を行います。

  • 認証を実行する
  • ログインが成功したら true を返し、ログインが失敗したら false を返す

前へ      目次      索引      次へ     
Copyright 2002 Sun Microsystems, Inc. All rights reserved.