9.2. 自動登録

自動登録では、ユーザーが認証プラグインモジュールで設定された方法で正常に認証されるとすぐに、エンドエンティティー登録要求が処理されます。エージェントの承認は必要ありません。以下の認証プラグインモジュールが提供されます。
  • ディレクトリーベースの登録エンドエンティティーは、ユーザー ID とパスワード、またはその DN とパスワードを使用して LDAP ディレクトリーに対して認証されます。「ディレクトリーベースの認証の設定」を参照してください。
  • PIN ベースの登録。エンドエンティティーは、ディレクトリーエントリーのユーザー ID、パスワード、および PIN セットを使用して LDAP ディレクトリーに対して認証されます。「PIN ベースの登録の設定」を参照してください。
  • 証明書ベースの認証の使用。ある種のエンティティー (エンドユーザーとサーバーやトークンなどの他のエンティティーの両方) は、CA によって発行された ID を証明する証明書を使用して CA に対して認証されます。これは、更新プロセスの認証に元の証明書が提示される、更新に最も一般的に使用されます。「証明書ベースの認証の使用」を参照してください。
  • AgentCertAuth.このメソッドは、リクエストを送信したエンティティーがサブシステムエージェントとして認証される場合に証明書要求を自動的に承認します。ユーザーは、エージェント証明書を提示してエージェントとして認証します。提示された証明書がサブシステムでエージェント証明書として認識される場合、CA は証明書要求を自動的に処理します。
    この形式の自動認証は、サーバー証明書を登録する証明書プロファイルに関連付けることができます。
    このプラグインはデフォルトで有効になっており、パラメーターはありません。
  • フラットファイルベースの登録。ルーター (SCEP) の登録専用に使用されるテキストファイルには、IP アドレス、ホスト名、またはその他の識別子のリストと、通常はランダムな PIN であるパスワードが含まれています。ルーターはその ID と PIN を使用して CA に対して認証し、CA は提示する認証情報をテキストファイルの ID の一覧と比較します。「フラットファイル認証の設定」を参照してください。

9.2.1. ディレクトリーベースの認証の設定

UidPwdDirAuth および UdnPwdDirAuth プラグインモジュールは、ディレクトリーベースの認証を実装します。LDAP ディレクトリーに対して認証するユーザー ID または DN およびパスワードを指定して、証明書にエンドユーザーを登録します。
  1. UidPwdDirAuth または UdnPwdDirAuth 認証モジュールのいずれかのインスタンスを作成して、インスタンスを設定します。
    1. CA コンソールを開きます。
      pkiconsole https://server.example.com:8443/ca
    2. Configuration タブで、ナビゲーションツリーの Authentication を選択します。
      右側のペインには、現在設定されている認証インスタンスを一覧表示する Authentication Instance タブが表示されます。
      注記
      UidPwdDirAuth プラグインはデフォルトで有効です。
    3. Add をクリックします。
      Select Authentication plug-in Implementation ウインドウが表示されます。
    4. ユーザー ID およびパスワード認証に UidPwdDirAuth を選択するか、DN およびパスワード認証には UdnPwdDirAuth を選択します。
    5. Authentication Instance Editor ウィンドウで、以下のフィールドに入力します。
      • Authentication Instance ID。デフォルトのインスタンス名を許可するか、新しい名前を入力します。
      • dnpattern。ディレクトリー属性およびエントリー DN から形成するサブジェクト名パターンを表す文字列を指定します。
      • ldapStringAttributes.エンドエンティティーの 認証 として考慮されるべき LDAP 文字列属性の一覧を指定します。これらの属性に対応する値は、認証ディレクトリーから認証トークンにコピーし、証明書プロファイルによりサブジェクト名を生成するために使用されます。このパラメーターの値の入力は任意です。
      • ldapByteAttributes.エンドエンティティーの 認証 として考慮されるべき LDAP バイト (バイナリー) 属性の一覧を指定します。指定した場合、これらの属性に対応する値は、ユーザーの証明書への追加情報の追加など、他のモジュールで使用するために認証ディレクトリーから認証トークンにコピーされます。
        このパラメーターの値の入力は任意です。
      • ldap.ldapconn.host.認証ディレクトリーの完全修飾 DNS ホスト名を指定します。
      • ldap.ldapconn.port.認証ディレクトリーが要求をリッスンする TCP/IP ポートを指定します。ldap.ldapconn.secureConn. チェックボックスを選択した場合、これは SSL ポート番号になります。
      • ldap.ldapconn.secureConn.認証ディレクトリーが Certificate System からの要求をリッスンするポートのタイプ (SSL または非 SSL) を指定します。これが SSL ポートである場合に選択します。
      • ldap.ldapconn.version.LDAP プロトコルのバージョンの 2 または 3 を指定します。バージョン 3.x 以降のすべての Directory Server は LDAPv3 であるため、デフォルトは 3 です。
      • ldap.basedn.認証ディレクトリーを検索するためにベース DN を指定します。サーバーは、HTTP 入力 (ユーザーが登録フォームに入るもの) とベース DN の uid フィールド値を使用して LDAP 検索フィルターを構築します。
      • ldap.minConns.認証ディレクトリーで許可される最小接続数を指定します。許容値は、1 から 3 です。
      • ldap.maxConns.認証ディレクトリーで許可される接続の最大数を指定します。許容値は、3 から 10 です。
    6. OK をクリックします。認証インスタンスが設定され、有効になっている。
  2. 特定の証明書のポリシーを設定して、ユーザーの登録に使用する証明書プロファイルを設定します。証明書プロファイルの入力を設定して登録フォームをカスタマイズします。また、ユーザーを認証するためにプラグインが必要とする情報の入力を含めます。デフォルトの入力に、収集する必要のあるすべての情報が含まれていない場合には、サードパーティーツールで作成した要求を送信します。
    プロファイルの設定に関する詳細は、「サブジェクト代替名への LDAP ディレクトリー属性値およびその他の情報の挿入」 を参照してください。

バインドされた LDAP 接続の設定

一部の環境では、認証に使用される LDAP サーバーの匿名バインドを禁止する必要があります。CA と LDAP サーバーとの間にバインドされた接続を作成するには、以下の設定を変更する必要があります。
  • CS.cfg の以下の例に従って、ディレクトリーベースの認証を設定します。
    auths.instance.UserDirEnrollment.ldap.ldapBoundConn=true
    auths.instance.UserDirEnrollment.ldap.ldapauth.authtype=BasicAuth
    auths.instance.UserDirEnrollment.ldap.ldapauth.bindDN=cn=Directory Manager
    auths.instance.UserDirEnrollment.ldap.ldapauth.bindPWPrompt=externalLDAP
    externalLDAP.authPrefix=auths.instance.UserDirEnrollment
    cms.passwordlist=internaldb,replicationdb,externalLDAP
    bindPWPrompt は、password.conf ファイルで使用されるタグまたはプロンプトです。また、options passwordlist オプションおよび authPrefix オプション で使用される名前でもあります。
  • CS.cfg からタグまたはプロンプトを password.conf でパスワードとともに追加します。
    externalLDAP=your_password

外部承認の設定

また、ディレクトリーベースの認証プラグインを設定して、ユーザーのグループメンバーシップを評価することもできます。このプラグインを設定するには、CS.cfg に以下のオプションを設定する必要があります。
  • groupsEnable は、グループの取得を可能にするブール値オプションです。デフォルト値は false です。
  • groupsBasedn はグループのベース DN です。これは、デフォルト basedn と異なる場合に指定する必要があります。
  • group は、グループの DN コンポーネントです。デフォルト値は ou=groups です。
  • groupObjectClass は、グループオブジェクトクラス groupofuniquenamesgroupofnames のいずれかです。デフォルト値は groupofuniquenames です。
  • groupUseridName は、グループオブジェクトメンバー属性のユーザー ID 属性の名前です。デフォルト値は (cn=*) です。
  • useridName は、ユーザー ID DN コンポーネントの名前です。デフォルト値は uid です。
  • searchGroupUserByUserdn は、userdn または ${groupUserIdName}=${uid} 属性のグループオブジェクトメンバー属性を検索するかどうかを決定するブール値オプションです。デフォルト値は true です。
以下に例を示します。
auths.instance.UserDirEnrollment.pluginName=UidPwdDirAuth
auths.instance.UserDirEnrollment.ldap.basedn=cn=users,cn=accounts,dc=local
auths.instance.UserDirEnrollment.ldap.groupObjectClass=groupofnames
auths.instance.UserDirEnrollment.ldap.groups=cn=groups
auths.instance.UserDirEnrollment.ldap.groupsBasedn=cn=accounts,dc=local
auths.instance.UserDirEnrollment.ldap.groupsEnable=true
auths.instance.UserDirEnrollment.ldap.ldapconn.host=local
auths.instance.UserDirEnrollment.ldap.ldapconn.port=636
auths.instance.UserDirEnrollment.ldap.ldapconn.secureConn=true
最後に、/instance_path/ca/profiles/ca/profile_id.cfg ファイルを変更して、CS.cfg に定義された UserDirEnrollment 認証インスタンスを使用するようにプロファイルを設定し、および必要に応じて、グループに基づく許可用の ACL を提供します。以下に例を示します。
auth.instance_id=UserDirEnrollment
auths.acl=group="cn=devlab-access,ou=engineering,dc=example,dc=com"

9.2.2. PIN ベースの登録の設定

PIN ベースの認証では、LDAP ディレクトリーでユーザーごとに PIN を設定し、それらの PIN をユーザーに配布してから、証明書要求に入力するときにユーザーにユーザー ID とパスワードとともに PIN を提供してもらいます。その後、ユーザーはユーザー ID とパスワードを使用して LDAP ディレクトリーと LDAP エントリーの PIN に対して認証されます。ユーザーが認証に成功すると、リクエストは自動的に処理され、新しい証明書が発行されます。
Certificate System は、Directory Server に必要なスキーマを Directory Server に追加し、各ユーザーの PIN を生成するツール setpin を提供します。
PIN ツールは、以下の機能を実行します。
  • PIN に必要なスキーマを LDAP ディレクトリーに追加します。
  • 設定した PIN に読み取り/書き込みパーミッションを持つ PIN マネージャーユーザーを追加します。
  • PIN の使用後に PIN の削除を許可するように ACI を設定し、PIN マネージャーに PIN の読み取り/書き込み権限を付与し、PIN を作成または変更できないようにします。
  • 各ユーザーエントリーに PIN を作成します。
注記
このツールは、『Certificate System Command-Line Tools Guide』 に記載されています。
  1. PIN ツールを使用して PIN に必要なスキーマを追加し、ユーザーエントリーに PIN を追加してから PIN をユーザーに配布します。
    1. /usr/share/pki/native-tools/ ディレクトリーを開きます。
    2. テキストエディターで setpin.conf ファイルを開きます。
    3. ファイルに概説されている手順に従って、適切な変更を加えます。
      通常、更新が必要なパラメーターは、Directory Server のホスト名、Directory Manager のバインドパスワード、および PIN マネージャーのパスワードです。
    4. setpin.conf ファイルをポイントする optfile オプションを指定して、setpin コマンドを実行します。
      setpin optfile=/usr/share/pki/native-tools/setpin.conf
      このツールは、新しい属性 (デフォルトでは pin) および新しいオブジェクトクラス (デフォルトは pinPerson) でスキーマを変更し、pinmanager ユーザーを作成し、ACI を設定して、pinmanager ユーザーのみが pin 属性を編集できるようにします。
    5. 特定のユーザーエントリーの PIN を生成するか、ユーザー定義の PIN を指定する場合は、これらのエントリーの DN を指定して入力ファイルを作成します。たとえば、以下のようになります。
      dn:uid=bjensen,ou=people,dc=example,dc=com
      dn:uid=jsmith,ou=people,dc=example,dc=com
      dn:jtyler,ou=people,dc=example,dc=com
      ...
      入力ファイルを構築する方法は、『Certificate System コマンドラインツールガイド』の PIN ジェネレーターの章を参照してください。
    6. setpin コマンドのセットアップモードを無効にします。setup 行をコメントアウトするか、値を no に変更します。
      vim /usr/share/pki/native-tools/setpin.conf
      
      setup=no
      セットアップモードでは、必要なユーザーとオブジェクトクラスが作成されますが、セットアップモードでは、ツールは PIN を生成しません。
    7. setpin コマンドを実行して、ディレクトリーに PIN を作成します。
      ヒント
      実際にディレクトリーを実際には変更せずに PIN のリストを生成する write オプションを使用せずに、最初にツールをテスト実行します。
      以下に例を示します。
      setpin host=yourhost port=9446 length=11 input=infile output=outfile write "binddn=cn=pinmanager,o=example.com" bindpw="password" basedn=o=example.com "filter=(uid=u*)" hash=sha256
      警告
      hash 引数を none に設定しないでください。hash=none を付けて setpin コマンドを実行すると、ピンはプレーンテキストとしてユーザー LDAP エントリーに保存されます。
    8. 必要な認証方法の設定が完了したら、出力ファイルを使用して PIN をユーザーに配信します。
      PIN ベースの登録が機能することを確認したら、PIN をユーザーに配信して、登録時に使用できるようにします。PIN のプライバシーを保護するには、安全で帯域外での配信方法を使用します。
  2. 証明書プロファイルにポリシーを設定して、ユーザーを登録します。証明書プロファイルポリシーの詳細は、3章証明書を発行するルール (証明書プロファイル) の作成 を参照してください。
  3. UidPwdPinDirAuth 認証プラグインのインスタンスを作成して設定します。
    1. CA コンソールを開きます。
      pkiconsole https://server.example.com:8443/ca
    2. Configuration タブで、ナビゲーションツリーの Authentication を選択します。
      右側のペインには、現在設定されている認証インスタンスを一覧表示する Authentication Instance タブが表示されます。
    3. Add をクリックします。
      Select Authentication plug-in Implementation ウインドウが表示されます。
    4. UidPwdPinDirAuth プラグインモジュールを選択します。
    5. Authentication Instance Editor ウィンドウで、以下のフィールドに入力します。
      • Authentication Instance ID。デフォルトのインスタンス名を使用するか、新しい名前を入力します。
      • removePin.エンドユーザーの認証に成功した後に、認証ディレクトリーから PIN を削除するかどうかを設定します。ディレクトリーから PIN を削除すると、ユーザーが複数回登録できなくなるため、複数の証明書を取得できなくなります。
      • pinAttr.PIN の認証ディレクトリー属性を指定します。PIN Generator ユーティリティーは、setpin.conf ファイルの objectclass パラメーターの値に属性を設定します。このパラメーターのデフォルト値は pin です。
      • dnpattern。ディレクトリー属性およびエントリー DN から形成するサブジェクト名パターンを表す文字列を指定します。
      • ldapStringAttributes.エンドエンティティーの 認証 として考慮されるべき LDAP 文字列属性の一覧を指定します。このパラメーターの値の入力は任意です。
      • ldapByteAttributes.エンドエンティティーの 認証 として考慮されるべき LDAP バイト (バイナリー) 属性の一覧を指定します。指定した場合、これらの属性に対応する値は、ユーザーの証明書への追加情報の追加など、他のモジュールで使用するために認証ディレクトリーから認証トークンにコピーされます。
        このパラメーターの値の入力は任意です。
      • ldap.ldapconn.host.認証ディレクトリーの完全修飾 DNS ホスト名を指定します。
      • ldap.ldapconn.port.認証ディレクトリーが Certificate System からのリクエストをリッスンする TCP/IP ポートを指定します。
      • ldap.ldapconn.secureConn.認証ディレクトリーが要求をリッスンするポートの、SSL タイプ、SSL、または非 SSL を指定します。これが SSL ポートである場合に選択します。
      • ldap.ldapconn.version.LDAP プロトコルのバージョンの 2 または 3 を指定します。デフォルトでは、3.x 以降のすべての Directory Server バージョンが LDAPv3 であるため、これは 3 になります。
      • ldap.ldapAuthentication.bindDN.認証ディレクトリーから PIN を削除する際にバインドするユーザーエントリーを指定します。removePin チェックボックスが選択されている場合に限り、このパラメーターを指定します。ディレクトリー内の PIN 属性のみを変更するパーミッションを持つ別のユーザーエントリーを作成して使用することが推奨されます。たとえば、ディレクトリーのコンテンツ全体を変更する権限があるため、Directory Manager のエントリーを使用しないでください。
      • password.ldap.ldapauthbindDN パラメーターで指定された DN に関連付けられたパスワードを指定します。変更を保存したら、サーバーはパスワードをシングルサインオンパスワードキャッシュに保存して、後続の起動時に使用します。このパラメーターは、removePin チェックボックスが選択されている場合にのみ設定する必要があります。
      • ldap.ldapAuthentication.clientCertNickname.PIN を削除する認証ディレクトリーへの SSL クライアント認証に使用する証明書のニックネームを指定します。証明書が有効で、認証ディレクトリーの証明書データベースで信頼できる CA によって署名されていることを確認し、認証ディレクトリーの certmap.conf ファイルがディレクトリーの DN に正しくマッピングするように設定されていることを確認してください。これは PIN の削除のみに必要です。
      • ldap.ldapAuthentication.authtype.認証ディレクトリーから PIN を削除するのに必要な認証タイプ、Basic 認証、または SSL クライアント認証を指定します。
        • BasicAuth は Basic 認証を指定します。このオプションを使用すると、ldap.ldapAuthentication.bindDN および password パラメーターの正しい値を入力します。サーバーは ldap.ldapAuthentication.bindDN 属性の DN を使用してディレクトリーにバインドします。
        • SslClientAuth は、SSL クライアント認証を指定します。このオプションを使用すると、ldap.ldapconn.secureConn パラメーター の値を true に設定し、証明書のニックネームの ldap.ldapAuthentication.clientCertNickname パラメーターの値を、SSL クライアント認証に使用する証明書のニックネームに設定します。
      • ldap.basedn.認証ディレクトリーを検索するためのベース DN を指定します。サーバーは、HTTP インプット (ユーザーが登録フォームに入力するもの) および LDAP 検索フィルターを構築するためのベース DN から uid フィールドの値を使用します。
      • ldap.minConns.認証ディレクトリーで許可される最小接続数を指定します。許容値は、1 から 3 です。
      • ldap.maxConns.認証ディレクトリーで許可される接続の最大数を指定します。許容値は、3 から 10 です。
    6. OK をクリックします。
  4. 証明書プロファイルで入力を設定して、登録フォームをカスタマイズします。ユーザーの認証にプラグインが必要とする情報を含めます。デフォルトの入力に、収集する必要のあるすべての情報が含まれていない場合には、サードパーティーツールで作成した要求を送信します。

9.2.3. 証明書ベースの認証の使用

証明書ベースの認証 は、要求側の ID を検証し、送信されるリクエストを自動的に検証し、認証する証明書が表示される場合です。これは、元の証明書がユーザー、サーバー、およびアプリケーションによって提示され、その証明書が要求を認証するのに使用される場合に、更新プロセスに最も一般的に使用されます。
証明書の初回要求に証明書ベースの認証を使用する場合は、その他の状況があります。たとえば、トークンに汎用証明書を一括で読み込んで、ユーザーがユーザー証明書に登録するときにユーザーを認証するために使用することも、ユーザーに署名証明書を発行して、暗号化証明書の要求を認証するために使用することもできます。
証明書ベースの認証モジュール SSLclientCertAuth はデフォルトで有効になっており、この認証方法は任意のカスタム証明書プロファイルで参照できます。

9.2.4. フラットファイル認証の設定

ルーター証明書は無作為に生成される PIN を使用して登録され、認証されます。CA は flatFileAuth 認証モジュールを使用して、ルーターの認証情報が含まれるテキストファイルを処理します。

9.2.4.1. flatFileAuth モジュールの設定

フラットファイル認証はすでに SCEP 登録用に設定されていますが、フラットファイルの場所とその認証パラメーターを編集できます。
  1. CA コンソールを開きます。
    pkiconsole https://server.example.com:8443/ca
  2. Configuration タブで、ナビゲーションツリーの Authentication を選択します。
  3. flatFileAuth 認証モジュールを選択します。
  4. Edit/View をクリックします。
  5. ファイルの場所と名前を変更するには、fileName フィールドをリセットします。
    authentication name パラメーターを変更するには、keyAttributes の値を、CN などの SCEP 登録フォームで送信された別の値にリセットします。また、UID,CN のようにコンマで区切って複数の name パラメーターを使用することもできます。パスワードパラメーター名を変更するには、authAttributes フィールドをリセットします。
  6. 編集を保存します。

9.2.4.2. flatfile.txt の編集

同じ flatfile.txt ファイルを使用して、SCEP 登録をすべて認証します。このファイルは、新規 PIN がルーターに発行されるたびに手動で更新する必要があります。
デフォルトでは、このファイルは /var/lib/pki/pki-ca/ca/conf/ にあり、認証エントリーごとに 2 つのパラメーター、サイトの UID (通常は IPv4 または IPv6)、およびルーターが発行する PIN の 2 つのパラメーターを指定します。
UID:192.168.123.123
PIN:HU89dj
各エントリーの後には空白行が続く必要があります。以下に例を示します。
UID:192.168.123.123
PIN:HU89dj

UID:12.255.80.13
PIN:fiowIO89

UID:0.100.0.100
PIN:GRIOjisf
認証エントリーが空の行で区切られていない場合、ルーターが CA に対して認証を試みたときに、失敗します。以下に例を示します。
... flatfile.txt entry ...
UID:192.168.123.123
PIN:HU89dj
UID:12.255.80.13
PIN:fiowIO89

... error log entry ...
[13/Jun/2020:13:03:09][http-9180-Processor24]: FlatFileAuth: authenticating user: finding user from key: 192.168.123.123
[13/Jun/2020:13:03:09][http-9180-Processor24]: FlatFileAuth: User not found in password file.