証明書のマッピングは、LDAP ディレクトリ内のユーザーエントリをサーバーがどのように検索するかを決定します。certmap.conf ファイルを使用して、名前で指定された証明書を LDAP エントリにマップする方法を設定できます。このファイルを編集し、LDAP ディレクトリの組織と照合されるようにエントリを追加し、ユーザーに持たせる証明書のリストを表示するようにします。subjectDN 内で使用されているユーザー ID、電子メール、またはその他の値に基づいてユーザーを認証することができます。特に、マッピングファイルでは、次の情報を定義します。
LDAP ツリー内でサーバーが検索を開始する場所
LDAP ディレクトリ内のエントリを検索するときにサーバーが検索条件として使用する証明書の属性
サーバーが追加の検証プロセスを実施するかどうか
server-root/userdb/certmap.conf
このファイルには、それぞれが異なる CA に適用される、1 つ以上の名前付きマッピングが含まれています。マッピングの構文は、次のとおりです。
certmap name issuerDNname :property [ value]
最初の行にはエントリの名前と、CA 証明書内に記載されている識別名を設定する属性を指定します。name は任意です。好きな名前に定義できます。ただし、issuerDN は、そのクライアント証明書を発行した CA の発行者 DN と完全に一致している必要があります。たとえば、次の 2 つの発行者 DN 行は、属性間に空白文字があるかどうかという点が異なるだけですが、サーバーは、これら 2 つのエントリを別のものとして取り扱います。
certmap sun1 ou=Sun Certificate Authority,o=Sun,c=UScertmap sun2 ou=Sun Certificate Authority, o=Sun, c=US
Sun Java System Directory Server を使用しているときに issuerDN の照合で問題があった場合は、Directory Server のエラーログを調べて有用な情報を探します。
名前付きマッピングの 2 行目以降の行は、プロパティーが値と照合されます。certmap.conf ファイルには、次に示す 6 つのデフォルトのプロパティーがあります。証明書 API を使用すると、ユーザー独自のプロパティーをカスタマイズできます。デフォルトのプロパティーは次のとおりです。
DNComps はコンマで区切った属性のリストで、ユーザーの情報、つまりクライアント証明書の所有者と一致するエントリの検索を、サーバーが LDAP ディレクトリ内のどこから開始するかを判断するために使用されます。サーバーは、クライアント証明書からこれらの属性の値を収集し、LDAP DN を設定するためにその値を使用します。これが、LDAP ディレクトリ内でサーバーが検索を開始する場所を決定します。たとえば、DN の o 属性と c 属性を使用するよう DNComps を設定した場合、サーバーは、LDAP ディレクトリ内の o=org、c= country エントリから検索を開始します。ここで org と country は、証明書内の DN に記載されている値に置き換えられます。
次のような場合には注意が必要です。
マッピング内に DNComps エントリがない場合、サーバーは CmapLdapAttr の設定、またはクライアント証明書内のサブジェクト DN 全体 (つまりエンドユーザーの情報) のいずれかを使用します。
DNComps エントリはあるが値がないという場合、サーバーは LDAP ツリー全体を検索してフィルタに一致するエントリを探します。
FilterComps は、コンマで区切った属性のリストで、クライアント証明書内のユーザーの DN から情報を収集してフィルタを作成するために使用されます。サーバーは、これらの属性の値を使用して、LDAP ディレクトリ内でエントリを照合するために使用する検索条件を作成します。サーバーが LDAP ディレクトリ内で、証明書から収集したユーザー情報に一致する 1 つまたは複数のエントリを検出した場合、検索は成功し、オプションでサーバーが検証を行います。
たとえば、電子メール属性とユーザー ID 属性を使用するよう FilterComps を設定すると (FilterComps=e,uid)、サーバーは、電子メールとユーザー ID の値がクライアント証明書から収集したエンドユーザーの情報と一致するエントリをディレクトリから検索します。電子メールアドレスとユーザー ID は、通常、ディレクトリ内で一意のエントリであるため、フィルタとして適切です。フィルタは、LDAP データベース内で 1 つだけのエントリと一致するような特有のものである必要があります。
フィルタのための属性名は、LDAP ディレクトリではなく、証明書から取得した属性名である必要があります。たとえば、一部の証明書にはユーザーの電子メールアドレスの e 属性がありますが、LDAP では、この属性を mail と呼んでいます。
次の表は、x509v3 証明書の属性を示しています。
属性 |
説明 |
---|---|
国 |
|
内容の紹介 |
|
共通名 |
|
保存場所 |
|
状態 |
|
組織単位 |
|
UNIX/Linux ユーザー ID |
|
電子メール アドレス |
verifycert は、LDAP 内にある証明書とクライアントの証明書を比較するかどうかをサーバーに指示します。プロパティーは次の 2 つの値を取ります。「on」と「off」です。ただし、このプロパティーは、LDAP ディレクトリに証明書があるときだけ使用してください。この機能は、エンドユーザーが、有効な、取り消されていない証明書を確実に所有できるようにするのに便利です。
CmapLdapAttr は、LDAP ディレクトリ内の属性の名前で、対象のユーザーに属しているすべての証明書に記載されているサブジェクト DN が含まれています。このプロパティーのデフォルトは、certSubjectDN です。この属性は標準の LDAP 属性ではないため、このプロパティーを使用するには、LDAP スキーマを拡張する必要があります。詳細は、「Introduction to SSL」を参照してください。
このプロパティーが certmap.conf ファイル内に存在する場合、サーバーは、このプロパティーの名前の付いた属性が、証明書から取得されたサブジェクトの完全な DN に一致しているエントリを LDAP ディレクトリ全体から検索します。エントリが検出されなかった場合、サーバーは DNComps マッピングと FilterComps マッピングを使用して、検索を再試行します。
LDAP エントリと証明書を照合するためのこの方法は、DNComps と FilterComps を使用してエントリを照合することが難しい場合に便利です。
Library は、共用ライブラリまたは DLL へのパス名です。証明書 API を使用して独自のプロパティーを作成する場合のみ、このプロパティーを使用してください。
InitFn は、カスタムライブラリの init 関数の名前です。証明書 API を使用して独自のプロパティーを作成する場合のみ、このプロパティーを使用してください。
これらのプロパティーについては、「マッピング例」に記載されている 例を参照してください。
クライアント証明書 API を使用して、独自のプロパティーを作成できます。カスタムマッピングを行ったら、次のようにマッピングを参照します。
name:library path_to_shared_libraryname :InitFN name_of_ init_function
次に例を示します。
certmap default1 o=Sun Microsystems, c=US default1:library /usr/sun/userdb/plugin.so default1:InitFn plugin_init_fn default1:DNComps ou o c default1:FilterComps l default1:verifycert on
certmap.conf ファイルには、少なくとも 1 つのエントリが必要です。次の例では、certmap.conf ファイルを使用できるいくつかの方法を示しています。
certmap default defaultdefault:DNComps ou, o, cdefault:FilterComps e, uiddefault:verifycert on
この例でサーバーは、ou=orgunit、 o=org、c=country エントリを格納している LDAP 分岐点から検索を開始します。ここで斜体のテキストは、クライアント証明書内のサブジェクト DN に記載されている値に置き換えられます。
次に、サーバーが証明書に記載されている電子メールアドレスとユーザー ID の値を使用して、LDAP ディレクトリ内で一致するエントリを検索します。エントリが検出されると、サーバーは、クライアントにより送信されたエントリをディレクトリ内に格納されているエントリと比較して、証明書を検証します。
次のファイル例には、2 つのマッピングが記述されています。1 つはデフォルト用で、もう 1 つは US Postal Service 用です。
certmap default defaultdefault:DNCompsdefault:FilterComps e, uid
certmap usps ou=United States Postal Service, o=usps, c=USusps:DNComps ou,o,cusps:FilterComps eusps:verifycert on
サーバーが US Postal Service 以外から証明書を取得する場合、サーバーはデフォルトのマッピングを使用します。これは、LDAP ツリーの最上部から、クライアントの電子メールアドレスとユーザー ID に一致するエントリの検索を開始します。証明書が US Postal Service からのものである場合、サーバーは、組織単位を格納している LDAP 分岐から検索を開始し、一致する電子メールアドレスを探します。サーバーは証明書の検証も行います。それ以外の証明書は検証されません。
証明書内の発行者 DN (つまり CA の情報) は、マッピングの最初の行に記述されている発行者 DN と同じでなくてはなりません。前述の例では、o=United States Postal Service,c=US という発行者 DN からの証明書は、o 属性と c 属性の間に空白文字がないため一致しません。
次の例では、CmapLdapAttr プロパティーを使用して、クライアント証明書から取得したサブジェクト DN 全体とぴったり一致する値を持つ certSubjectDN という属性を、LDAP データベースから検索します。この例では、LDAP ディレクトリに certSubjectDN 属性を持つエントリがあることを前提としています。
certmap myco ou=My Company Inc, o=myco, c=USmyco:CmapLdapAttr certSubjectDNmyco:DNComps o, c myco:FilterComps mail, uid myco:verifycert on
次のようなクライアント証明書のサブジェクトを考えます。
uid=Walt Whitman, o=LeavesOfGrass Inc, c=US
サーバーは、はじめに次の情報を格納しているエントリを検索します。
certSubjectDN=uid=Walt Whitman, o=LeavesOfGrass Inc, c=US
1 つまたは複数の一致したエントリが検出された場合、サーバーはそのエントリの検証処理を進めます。一致するエントリが検出されなかった場合には、サーバーは、DNComps と FilterComps を使用して、一致するエントリを検索します。この例では、サーバーは、o=LeavesOfGrass Inc, c=US の下にあるすべてのエントリから uid=Walt Whitman を検索します。