9.9. 証明書ベースのクライアント認証の使用

Directory Server は、LDAP クライアントの証明書ベースの認証と、レプリケーションなどのサーバー間接続をサポートします。
証明書ベースの認証を有効にしている場合は、設定によっては、クライアントが証明書を使用して認証したり、認証する必要があります。証明書を検証した後に、サーバーは証明書の subject フィールドの属性に基づいて、ディレクトリー内のユーザーを検索します。検索でユーザーエントリーを 1 つだけ返すと、Directory Server はこのユーザーを使用してすべての操作を行います。必要に応じて、認証に使用される証明書が、ユーザーの userCertificate 属性に保存されている Distinguished Encoding Rules (DER) 形式の証明書と一致するように設定できます。
証明書ベースの認証を使用する利点:
  • 効率が改善されました。証明書データベースのパスワードに一度要求されたアプリケーションを使用し、その証明書を後続のバインドまたは認証操作に使用すると、バインド DN およびパスワードを継続的に提供するよりも効率的です。
  • セキュリティーが改善されました。証明書ベースの認証は、証明書ベースの認証では公開鍵の暗号化が使用されるため、証明書以外のバインド操作よりも安全です。バインド認証情報はネットワーク全体で傍受することはできません。証明書やデバイスが失われた場合は、PIN なしで使用しないため、フィッシング攻撃などのサードパーティーの干渉の影響を受けません。

9.9.1. 証明書ベースの認証の設定

証明書ベースの認証を有効にするには、以下を行います。
  1. 暗号化された接続を有効にします。詳細については、「TLS の有効化」 を参照してください。
  2. CA 証明書をインストールし、クライアントとサーバーの接続の信頼オプションを設定します。「CA 証明書のインストール」を参照してください。
  3. 必要に応じて、クライアントおよびサーバーの CT,, 信頼オプションが CA 証明書に設定されていることを確認します。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate get "Example-CA"
    Certificate Name: Example-CA
    Subject DN: CN=server.example.com,ST=Queensland,C=AU
    Issuer DN: CN=server.example.com,,ST=Queensland,C=AU
    Expires: 2021-05-09 10:57:54
    Trust Flags: CT,,
  4. /etc/dirsrv/slapd-instance_name/certmap.conf ファイルを作成し、証明書から Directory Server ユーザーへ情報をマッピングします。以下に例を示します。
    certmap default         default
    default:DNComps         dc
    default:FilterComps     mail,cn
    default:VerifyCert      on
    
    certmap example         o=Example Inc.,c=US
    example:DNComps
    これは、この発行者には DNComps パラメーターが空に設定されているため、o=Example Inc.,c=US 発行者識別名 (DN) セットを持つ証明書を使用するユーザーを認証するため、Directory Server が証明書のサブジェクトからベース DN を生成しないように設定されています。また、FilterComps および VerifyCert の設定も、デフォルトのエントリーから継承されます。
    指定の証明書とは異なる発行者 DN を持つ証明書は default エントリーの設定を使用し、証明書のサブジェクトの cn 属性に基づいてベース DN を生成します。これにより、ディレクトリー全体を検索せずに、Directory Server が特定の DN で検索を開始できます。
    すべての証明書について、Directory Server は、証明書のサブジェクトの mail 属性および cn 属性を使用して検索フィルターを生成します。ただし、mail がサブジェクトに存在しない場合は、Directory Server はサブジェクトで証明書の e 属性の値を自動的に使用します。
    利用可能なパラメーターの詳細と説明は、Red Hat Directory Server Configuration, Command, and File Referencecertmap.conf ファイルの説明を参照してください。
  5. クライアント認証を有効にします。たとえば、クライアント認証を任意に設定するには、以下を実行します。
    # dsconf -D "cn=Directory Manager" ldap://server.example.com security set --tls-client-auth="allowed"
    また、--tls-client-auth パラメーターを required に設定して、クライアントが認証に使用する必要のある証明書を設定します。
  6. /etc/dirsrv/slapd-instance_name/certmap.conf ファイルで alias_name:VerifyCert on を設定して、認証証明書がユーザーの userCertificate 属性に保存されている証明書と一致する必要がある場合は、その証明書をユーザーエントリーに追加します。「ユーザーへの証明書の追加」を参照してください。

9.9.2. ユーザーへの証明書の追加

証明書ベースの認証を設定する際に、認証に使用する証明書が、ユーザーの userCertificate バイナリー属性に保存されている証明書と一致する必要があるように設定できます。/etc/dirsrv/slapd-instance_name/certmap.conf ファイルに alias_name:VerifyCert on を設定してこの機能を有効にした場合は、影響を受けるユーザーの証明書をディレクトリーエントリーに追加する必要があります。
重要
証明書を、userCertificate 属性の識別名エンコーディングルール (DER) 形式で保存する必要があります。
ユーザーの userCertificate 属性に証明書を保存するには、以下を行います。
  1. 証明書が DER 形式ではない場合は、これを変換します。以下に例を示します。
    # openssl x509 -in /root/certificate.pem -out /root/certificate.der -outform DER
  2. 証明書をユーザーの userCertificate 属性に追加します。以下に例を示します。
    # ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x
    
    dn: uid=user_name,ou=People,dc=example,dc=com
    changetype: modify
    add: userCertificate
    userCertificate:< file:///root/example.der
バイナリー属性の使用に関する詳細は、「Binary 属性の使用」を参照してください。

9.9.3. バインドリクエストの EXTERNAL SASL メカニズムの強制

TLS セッションの開始時に、クライアントは証明書をサーバーに送信します。次に、バインド要求を送信します。ほとんどのクライアントは、SASL メカニズム EXTERNAL を使用してバインド要求を実行します。これは、バインド要求の認証情報ではなく、バインドの証明書で ID を使用する必要があることを Directory Server に通知します。
ただし、クライアントが簡単な認証または匿名の認証情報を使用する場合は、この情報がありません。この場合は、証明書および証明書のクライアント ID が有効であっても、TLS セッションが無効な認証情報で失敗します。
Directory Server を設定してクライアントが SASL メカニズム EXTERNAL を使用し、要求内の他のバインドメソッドを無視するには、以下を行います。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-force-sasl-external=on
Successfully replaced "nsslapd-force-sasl-external"

9.9.4. 証明書を使用した認証

OpenLDAP クライアントツールを使用して、証明書を使用して認証に対応する Directory Server インスタンスに対して認証します。
  1. CA 証明書、ユーザーキー、およびユーザー証明書の対応するパスに、以下の環境変数を設定します。以下に例を示します。
    LDAPTLS_CACERT=/home/user_name/CA.crt
    LDAPTLS_KEY=/home/user_name/user.key
    LDAPTLS_CERT=/home/user_name/user.crt
    あるいは、 ~/.ldaprc ファイルに TLS_CACERT パラメーター、TLS_KEY パラメーター、および TLS_CERT パラメーターを設定します。詳細は、ldap.conf(5) の man ページの 『TLS OPTIONS』 セクションを参照してください。
  2. サーバーに接続します。以下に例を示します。
    # ldapwhoami -H ldaps://server.example.com:636
別のクライアントを使用する場合は、証明書ベースの認証を使用して接続する方法は、クライアントアプリケーションのドキュメントを参照してください。