9.9. 証明書ベースのクライアント認証の使用
Directory Server は、LDAP クライアントの証明書ベースの認証と、レプリケーションなどのサーバー間接続をサポートします。
証明書ベースの認証を有効にしている場合は、設定によっては、クライアントが証明書を使用して認証したり、認証する必要があります。証明書を検証した後に、サーバーは証明書の subject フィールドの属性に基づいて、ディレクトリー内のユーザーを検索します。検索でユーザーエントリーを 1 つだけ返すと、Directory Server はこのユーザーを使用してすべての操作を行います。必要に応じて、認証に使用される証明書が、ユーザーの
userCertificate
属性に保存されている Distinguished Encoding Rules (DER) 形式の証明書と一致するように設定できます。
証明書ベースの認証を使用する利点:
- 効率が改善されました。証明書データベースのパスワードに一度要求されたアプリケーションを使用し、その証明書を後続のバインドまたは認証操作に使用すると、バインド DN およびパスワードを継続的に提供するよりも効率的です。
- セキュリティーが改善されました。証明書ベースの認証は、証明書ベースの認証では公開鍵の暗号化が使用されるため、証明書以外のバインド操作よりも安全です。バインド認証情報はネットワーク全体で傍受することはできません。証明書やデバイスが失われた場合は、PIN なしで使用しないため、フィッシング攻撃などのサードパーティーの干渉の影響を受けません。
9.9.1. 証明書ベースの認証の設定
証明書ベースの認証を有効にするには、以下を行います。
- 暗号化された接続を有効にします。詳細については、「TLS の有効化」 を参照してください。
- CA 証明書をインストールし、クライアントとサーバーの接続の信頼オプションを設定します。「CA 証明書のインストール」を参照してください。
- 必要に応じて、クライアントおよびサーバーの 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,,
/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 Reference』のcertmap.conf
ファイルの説明を参照してください。- クライアント認証を有効にします。たとえば、クライアント認証を任意に設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security set --tls-client-auth="allowed"
また、--tls-client-auth
パラメーターを required に設定して、クライアントが認証に使用する必要のある証明書を設定します。 /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
属性に証明書を保存するには、以下を行います。
- 証明書が DER 形式ではない場合は、これを変換します。以下に例を示します。
# openssl x509 -in /root/certificate.pem -out /root/certificate.der -outform DER
- 証明書をユーザーの
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 インスタンスに対して認証します。
- 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』 セクションを参照してください。 - サーバーに接続します。以下に例を示します。
# ldapwhoami -H ldaps://server.example.com:636
別のクライアントを使用する場合は、証明書ベースの認証を使用して接続する方法は、クライアントアプリケーションのドキュメントを参照してください。