|
以下の節では、ダイジェスト認証を使用するように Oracle Communications Converged Application Server をコンフィグレーションし、サポートされている LDAP サーバまたは RDBMS と連係させる方法について説明します。
以下の節では、ダイジェスト認証についての概要と、Oracle Communications Converged Application Server でのダイジェスト認証のサポートとコンフィグレーションについて説明します。
ダイジェスト認証とは、SIP または HTTP でユーザ認証に使用するシンプルなチャレンジ/応答メカニズムです。ダイジェスト認証の詳細は RFC 2617 で規定されています。
ダイジェスト認証を使用しているときに、保護されているサーバ リソースに対してクライアントが未認証のリクエストを行うと、サーバからクライアントに対して、nonce 値を使用してチャレンジが送信されます。クライアントは、要求されたアルゴリズム (デフォルトでは MD5) を使用して、暗号化された応答 (ダイジェスト) を生成します。その中には、ユーザ名、パスワード、チャレンジからの nonce 値、SIP メソッド、およびリクエストの URI が含まれます。
サーバは、自らダイジェスト値を再作成し、クライアントから受け取ったダイジェストと比較することで、クライアントのダイジェストを検証します。サーバは、ダイジェスト値を再作成するために、[A1] 値 (RFC 2617 を参照) のハッシュを必要とします。この中には、nonce、ユーザ名、パスワード、およびレルム名が少なくとも必要です。サーバが A1 値のハッシュを再作成するときには、格納してある当該ユーザのクリアテキストのパスワードを取得して求めるか、または計算済みのハッシュ値を取得します。クリアテキストのパスワードまたは計算済みのハッシュ値は、LDAP ディレクトリに格納してあるか、JDBC を使用して RDBMS から利用するかのいずれかです。そしてサーバは、A1 値のハッシュを使用してダイジェストを再作成し、クライアントのダイジェストと比較して、ユーザの ID を検証します。
ダイジェスト認証では、クライアントとサーバの間でクリアテキスト パスワードが送信されないため、HTTP 上で安全な認証を実現できます。また、クライアントのチャレンジで nonce 値を使用するため、ダイジェスト認証はリプレイ攻撃への耐性があります。一般的なリクエストでのチャレンジ/応答のメカニズムの詳細については、図 2-1 を参照してください。
Oracle Communications Converged Application Server には、LDAP または RDBMS を使用してクライアントのダイジェストの有効性を確認するための LDAP ダイジェスト ID アサーション セキュリティ プロバイダが含まれています。認証プロセスを完了するためには、認可プロバイダが別途必要です (「認証プロバイダのコンフィグレーション」を参照)。
ダイジェスト Id アサーション プロバイダが行うのは、クライアントのダイジェストを使用してユーザの資格を検証することだけです。ダイジェストを検証した後は、コンフィグレーション済みの認可プロバイダが、ユーザ名に基づいてそのユーザの存在をチェックし、結果の javax.security.auth.Subject のグループ メンバシップを設定して、認証プロセスを完了します。
ダイジェスト ID アサーション プロバイダでは、次のいずれかの形で、LDAP サーバまたは RDBMS にユーザ資格が格納されている必要があります。
LDAP ダイジェスト ID アサーション プロバイダは、クリアテキストのパスワードや計算済みのハッシュ値を格納できるすべての LDAP プロバイダと互換性があります。
| 注記 : | 組み込み LDAP ストアのスキーマを変更して、クリアテキストのパスワードや計算済みのハッシュ値を格納するための専用のフィールドを追加することはできません。ただし、テストやデモンストレーションの目的では、定義済みの「記述」フィールドにパスワード情報を格納できます。 |
| 注意 : | 認証の判断に DefaultAuthenticator プロバイダを使用しない場合は、ダイジェスト認証を使用する前に、DefaultAuthenticator をオプションのプロバイダにする (制御フラグを SUFFICIENT 以下にする) 必要があります。通常、クリアテキストまたはハッシュのパスワード情報の保持に別個の LDAP ストアを使用するプロダクション インストールでは、これは必須のコンフィグレーションです。 |

図 2-1 は、一般的なクライアント リクエストにおける ID アサーション プロバイダの基本的なアーキテクチャと使用法を示します。
sip-xml デプロイメント記述子でセキュリティ制約を指定すると、SIP サーブレット リソースが保護されます。「SIP サーブレット リソースのセキュリティ」を参照してください)。| 注意 : | ダイジェスト ID アサーション プロバイダは、使用された nonce とタイムスタンプのキャッシュを指定の期間保持します。指定したタイムスタンプより古いタイムスタンプのリクエストはすべて拒否されます。また、キャッシュに保持されている最新のタイムスタンプ/nonce ペアと同じタイムスタンプ/nonce ペアを使用するリクエストもすべて拒否されます。 |
javax.security.auth.Subject に設定します。認証プロセスは以上で完了します。 | 注意 : | ユーザが存在するかどうかのチェックやグループの設定が必要ない場合には、特別な「何もしない」ID アサーション認証プロバイダを使用すると、LDAP サーバに対する余分な接続を回避できます。詳細については、「認証プロバイダのコンフィグレーション」を参照してください。 |
認証が完了した後で、SIP サーブレット コンテナは、サーブレットの sip.xml デプロイメント記述子で定義された宣言によるセキュリティ制約に照らして、ログインした javax.security.auth.Subject の認可チェックを実行します。
LDAP ダイジェスト ID アサーション プロバイダと、コンフィグレーションされた認証プロバイダは、同じ LDAP ストアを使用することも、別々のストアを使用することもできます。
| 注意 : | 複数の LDAP ストアを使用する場合は、図 2-2 に示すように、ユーザ資格の追加、削除、または変更に応じて両方のストアを同期するための何らかのインフラストラクチャを構築する必要があります。LDAP ストアを同期する方法については、このドキュメントでは取り上げません。 |

ダイジェスト認証をコンフィグレーションするためには、LDAP サーバと LDAP 管理の基本を理解する必要があります。また、使用する LDAP サーバ実装の要件と制約を理解することと、LDAP のコンフィグレーションと Oracle Communications Converged Application Server のコンフィグレーションを変更する特権を持っていることも必要です。
表 2-1 は、Oracle Communications Converged Application Server と連係したダイジェスト認証を行うように LDAP サーバを完全にコンフィグレーションするために必要なすべての情報の概要です。
LDAP 認証プロバイダと、ダイジェスト認証 ID アサーション プロバイダは、複数の LDAP サーバに対してコンフィグレーションして、フェイルオーバ機能を実現できます。複数の LDAP サーバを使用したフェイルオーバ機能を実現するためには、ダイジェスト認証をコンフィグレーションするときに、各サーバに対する接続情報が必要です。「ダイジェスト認証のコンフィグレーションの手順」を参照してください。
Oracle Communications Converged Application Server でダイジェスト認証をコンフィグレーションするには、次の手順に従います。
| 注意 : | DefaultAuthenticator は、必須の認証プロバイダとしてデフォルトで設定されています。組み込み LDAP ストアに対して機能する DefaultAuthentication プロバイダを認証の判断に使用しない場合には、制御フラグを SUFFICIENT に変更する必要があります。 |
ダイジェストの検証に使用する LDAP サーバまたは RDBMS には、暗号化されていないクリアテキストのパスワード、計算済みのハッシュ値、標準の暗号化アルゴリズム (デフォルトでは 3DES_EDE/CBC/PKCS5Padding) で暗号化されたパスワードのいずれかが格納されている必要があります。以下の節では、必要な情報を格納するための LDAP サーバまたは RDBMS の設定について、概要を示します。LDAP サーバでは、使用するスキーマや管理ツールが異なるため、以下の手順を実行する方法については、必要に応じて LDAP サーバのドキュメントを参照してください。
複数の LDAP サーバを使用したセキュリティ プロバイダのフェイルオーバ機能を有効にする場合は、各 LDAP サーバを次のようにコンフィグレーションする必要があります。
RDBMS を使用する場合、または、LDAP サーバのスキーマで、暗号化されていないパスワードをユーザのパスワード属性に格納することが認められている場合は、さらにコンフィグレーションを行う必要はありません。ダイジェスト ID アサーション プロバイダは、デフォルトでは、パスワード フィールドで、暗号化されていないパスワードを検索します。
パスワード属性に対し、暗号化されていないパスワードの格納が認められていないスキーマの場合には、次の 2 つの方法があります。
スキーマで利用可能な資格属性の詳細については、LDAP サーバのドキュメントを参照してください。どの方法を使用する場合も、暗号化されていないパスワードの格納に使用する正確な属性名を記録します。LDAP ダイジェスト ID アサーション プロバイダをコンフィグレーションするときに、この属性の名前を入力する必要があります。
暗号化されていないパスワードではなく、計算済みのハッシュ値を使用する場合には、LDAP ディレクトリの次の 2 つの場所のいずれかにハッシュ値を格納できます。
新しい資格属性の使用または作成の詳細については、LDAP サーバのドキュメントを参照してください。
RDBMS ストアの場合は、スキーマに含まれる任意のカラムにハッシュ値を格納できます。RDBMS ID アサーション プロバイダをコンフィグレーションするときに、ハッシュ値の取得に使用する SQL コマンドを定義します。
Oracle Communications Converged Application Server では、ユーザ名、レルム名、および暗号化されていないパスワードを指定して簡単なユーティリティで、A1 値のハッシュを生成できます。このユーティリティは、com.bea.wcp.sip.security.utils.PreCalculatedHash のようにパッケージされます。以下の構文を使います。
java com.bea.wcp.sip.security.utils.PreCalculatedHashuser_namerealm_namepassword
また、サード パーティのユーティリティを使用したハッシュ値を生成したり、RFC 2617 の情報に基づいて独自のメソッドを作成することもできます。
ユーザ名、パスワード、またはレルム名の値が変更になったときに、格納したハッシュ値を自動的に更新するためのインフラストラクチャも構築する必要があります。パスワード情報をそのように維持する方法については、このドキュメントでは取り上げません。
Oracle Communications Converged Application Server に用意されているユーティリティを使用すると、ダイジェスト認可 Id アサーション プロバイダをコンフィグレーションするときに使用する、暗号化キー、暗号化の初期ベクタ、および暗号化パスワードの各値を計算できます。そのユーティリティの名前は com.bea.wcp.sip.security.utils.JSafeEncryptionUtil で、WLSS_HOME/telco/lib ディレクトリの wlss.jar ファイルにパッケージされています。
プロダクション環境では、別個の LDAP プロバイダにパスワード情報を格納することが大半であり、したがって、組み込み LDAP ストアに対して機能する DefaultAuthenticator は認証に必須ではありません。この節の手順に従って、プロバイダの制御フラグを sufficient に変更します。
| 注意 : | DefaultAuthenticator は、必須の認証プロバイダとしてデフォルトで設定されています。組み込み LDAP ストアに対して機能する DefaultAuthentication プロバイダを認証の判断に使用しない場合には、制御フラグを SUFFICIENT に変更する必要があります。 |
DefaultAuthenticator プロバイダのコンフィグレーションを変更するには、次の手順に従います。
クライアントのダイジェストの検証のみを行うダイジェスト Id アサーション プロバイダに加えて、ユーザの存在のチェックとユーザのグループ情報の値の設定を行う認証プロバイダをコンフィグレーションする必要があります。Oracle WebLogic Server 10g Release 3 ドキュメントの「LDAP 認証プロバイダのコンフィグレーション」の手順に従って、LDAP サーバ用の LDAP 認証プロバイダを構築します。「表 2-1 ダイジェスト Id アサーション プロバイダのチェックリスト」の情報を使用して、プロバイダをコンフィグレーションします。
ユーザの存在チェックやグループの値の設定が必要ない場合には、ダイジェスト Id アサーション プロバイダに加えて、IdentityAssertionAuthenticator] の名でパッケージされた、特別な「何もしない」認証プロバイダをコンフィグレーションおよび使用します。このプロバイダを使用すると、LDAP サーバに対する余分な接続のやり取りを防ぐことができます。このプロバイダはユーザ検証は実行しません。ユーザに対しグループ情報が必要ない場合に使用する必要があります。
「何もしない」認可プロバイダをコンフィグレーションするには、次の手順に従います。
以下のいずれかの節の手順に従って、ダイジェスト ID アサーション プロバイダを作成し、LDAP サーバまたは RDBMS ストアと関連付けます。
次の手順に従って、新しい LDAP ダイジェスト ID アサーション プロバイダを作成します。
PLAINTEXT]、[PRECALCULATEDHASH]、[REVERSIBLEENCRYPTED] のいずれかから選択します。ldap1.mycompany.com:1050 ldap2.mycompany.com:1050」のように指定します。
フェイルオーバのコンフィグレーションの詳細については、Oracle WebLogic Server 10g Release 3 ドキュメントの「LDAP 認証プロバイダのフェイルオーバのコンフィグレーション」を参照してください。
古い接続 (たとえばロード バランサによりタイム アウトとなった LDAP 接続) は接続プールから自動的に削除されます。
0 以外の値を設定した場合、プロバイダは、指定した秒数だけ待機したうえで、別の接続を試みるための新しいスレッドを生成します。たとえば、この値を 2 に設定した場合、プロバイダはまず、[Host] リストの最初のコンフィグレーション済み LDAP サーバに接続を試みます。2 秒が経過した時点で接続がまだ確立されていない場合、プロバイダは、新しいスレッドを生成し、[Host] リストの 2 番目のコンフィグレーション済み LDAP サーバへの接続を試みます。以下同様に、コンフィグレーション済みの各 LDAP サーバに対する接続を試みます。
次の手順に従って、新しい RDBMS ダイジェスト ID アサーション プロバイダを作成します。
SELECT G_NAME FROM groupmembers WHERE G_MEMBER = ?」のようにします。PLAINTEXT]、[PRECALCULATEDHASH]、[REVERSIBLEENCRYPTED] のいずれかから選択します。
Oracle Communications Converged Application Server の組み込み LDAP 実装を利用すると、テストまたはデモ環境でダイジェスト認証を使用できます。組み込み LDAP ストアのスキーマは変更できないので、既存の「記述」フィールドにパスワード情報を格納する必要があります。
組み込み LDAP ストアをダイジェスト認証に使用するには、以下の節の手順に従います。
新しいユーザを作成し、既存の「記述」フィールドにパスワード情報を格納するには、次の手順に従います。
次の手順に従って、組み込み LDAP ストアのパスワードを既知のパスワードに設定します。「LDAP ダイジェスト ID アサーション プロバイダのコンフィグレーション」で説明するように、ダイジェスト ID アサーション プロバイダをコンフィグレーションするときにこのパスワードを使用します。
コード リスト 2-1 は、Oracle Communications Converged Application Server の組み込み LDAP 実装を使用するドメインの config.xml のセキュリティ プロバイダ コンフィグレーションを示します。このようなコンフィグレーションはテスティングや開発のみを目的とする場合に適しています。コード リスト 2-1 には、「LDAP ダイジェスト ID アサーション プロバイダのコンフィグレーション」に示す手順にしたがってプロバイダをコンフィグレーションする時に定義する必要がある値について説明します。
<sec:authentication-provider xmlns:ext="http://www.bea.com/ns/weblogic/90/security/extension" xsi:type="ext:ldap-digest-identity-asserterType">
<sec:name>myrealmLdapDigestIdentityAsserter</sec:name>
<ext:user-base-dn>ou=people, ou=myrealm, dc=mydomain</ext:user-base-dn>
<ext:credential-attribute-name>説明</ext:credential-attribute-name>
<ext:digest-realm-name>wlss.oracle.com</ext:digest-realm-name>
<ext:host>myserver.mycompany.com</ext:host>
<ext:port>7001</ext:port>
<ext:principal>cn=Admin</ext:principal>
</sec:authentication-provider>
|