12. TLS の使用法

OpenLDAP のクラアントとサーバは Transport Layer Security (TLS) フレームワークを用いて、一貫性と機密の保護の提供や、 SASL EXTERNAL 機構を介した LDAP 認証をサポートします。

12.1. TLS の証明書

TLS は、クライアントとサーバのアイデンティティを伝えるのに X.509 証明を使います。すべてのサーバは適正な証明書を持つことを要求されるのに対し、クライアント証明書はオプションです。クライアントに証明書が必要となるのは SASL EXTERNAL で認証するときです。証明書の作成と管理についてより詳しくは、 OpenSSL の文書を参照してください。

12.1.1. サーバ証明書

サーバ証明書の DN は、サーバを指定するのに CN 属性を利用しなければならず、CN はサーバの完全修飾されたドメイン名にしなければなりません。さらに、別命とワイルドカードを subjectAltName 証明書拡張領域に置けます。サーバ証明書の名前についてより詳しくは RFC2830 を参照してください。

12.1.2. クライアント証明書

クライアント証明書の DN は、認証 DN として直に利用できます。 X.509 は X.500 標準の一部であり、LDAP は X.500 を基にしているので、両者の DN のフォーマットは同じですし、一般にユーザの X.509 証明書の DN は LDAP エントリの DN と一致させるべきです。しかし、DN が完全に同じにならないこともあるので、そのような DN には 認証 ID と LDAP エントリのマッピング で説明されているマッピング機能を適用できます。

12.2. TLS の設定

必要な証明書を得た後、TLS を有効にし、証明書を利用するようにするには、クライアントとサーバに多くのオプションの設定をしねければなりません。最低限、クライアントは信頼できる Certificate Authority (CA) 証明書のすべてを含んだ場所のファイル名を設定しなければなりません。サーバは CA 証明書と、自サーバの証明書と私有鍵(private key)を設定しなければなりません。

典型的に単一の CA がサーバ証明書と信頼されるクライアント証明書のすべてを発行するので、サーバだけが CA の署名による信頼が必要です。しかし、クライアントが別の組織によって管理されていて、多くの別の CA によって生成された証明書を持つ安全なサーバのいろいろに接続したい場合があります。そのような場合、クライアントは多くの別の信頼された CA のリストを設定ファイルに必要とすることはありえます。

12.2.1. サーバの設定

slapd の設定ディレクティブは slapd.conf(5) のグローバル設定ディレクティブのセクションに属します。

12.2.1.1. TLSCACertificateFile <filename>

このディレクティブは、slapd が信頼する CA の証明書を含んだ PEM フォーマットのファイルを指定します。このディレクティブに指定する証明書には、サーバ証明書を署名した CA の証明書が含まれていなければなりません。署名する CA がトップレベル(ルート)の CA でなければ、署名する CA からトップレベル CA に至る全シーケンスのの証明書が与えられているべきです。複数の証明書は単純にファイルに付加できます。その際の順番は関係ありません。

12.2.1.2. TLSCACertificatePath <path>

TLSCACertificateFile directive instead. このディレクティブは、個々の CA 証明書を別々のファイルに持っている場合に、それらを含んだディレクトリのパスを指定します。さらに、このディレクトリは OpenSSL のユーティリティ c_rehash を用いて特別に管理されなければなりません。この機能を利用すると、 OpenSSL ライブラリは、証明書ファイルの名前と連番のハッシュを基にして証明書ファイルの場所を求めようとします。ユーティリティ c_rehash は、ハッシュ化された名前から実際の証明書ファイルへのシンボリックリンクを作成するために使います。このオプションは実際にシンボリックリンクをサポートするファイルシステムでだけ利用できます。一般に、 TLSCACertificateFile ディレクティブを使う方が簡単です。

12.2.1.3. TLSCertificateFile <filename>

このディレクティブは slapd サーバ証明書を含んだファイルを指定します。証明書は一般に公開情報であり特殊な保護を必要としません。

12.2.1.4. TLSCertificateKeyFile <filename>

このディレクティブは、TLSCertificateFile に指定のファイルに格納された証明書に対応する私有鍵を含んだファイルを指定します。私有鍵それ自体は機密データであり、普通は保護のためにパスワード暗号化されています。しかし現在の実装は暗合化キーをサポートしていないので、暗合化してはならず、ファイル自体を厳重に保護しなければなりません。

12.2.1.5. TLSCipherSuite <cipher-suite-spec>

このディレクティブは、どの暗合方式を受けつけるかと優先順位を設定します、引数の <cipher-suite-spec> には OpenSSL でサポートされている暗合方式を指定します。利用可能な暗合方式の一覧を得るのには次のコマンドが使えます。

        openssl ciphers -v ALL

暗合方式を個々に指定する他に、HIGH, MEDIUM, LOW, EXPORT, EXPORT40 といった便利な指定子があります。さらに TLSv1, SSLv3, SSLv2 も指定できます。

12.2.1.6. TLSRandFile <filename>

このディレクティブは、/dev/urandom が利用できないときに乱数を取得するファイルを指定します。システムが /dev/urandom を提供していれば、このオプションは必要ありません。さもなければ、乱数データの出所を指定しなければなりません。 (Linux のように)デフォルトで /dev/urandom を提供しているシステムがある一方で、(Solaris のように) パッチをあてなければならないシステムや全くサポートしていないシステムもあります。後者の場合には、 EGD または PRNGD をインストールして、このディレクティブに EGD/PRNGD ソケットの名前を指定するとよいでしょう。このファイル名を設定するのには環境変数 RANDFILE も使えます。また、そのような方法もとれない場合、slapd のユーザのホームディレクトリに .rnd ファイルがあればそれを使います。ファイル .rnd を使うには、この名前のファイルを作成して、そこに数百バイトの任意のデータをコピーするだけです。このファイルは疑似乱数生成のための種を与えるために使われるだけであるので、それほど大きなデータを必要としません。

12.2.1.7. TLSVerifyClient { never | allow | try | demand }

このディレクティブ、TLS セッションのクライアント証明書の処理をどうするかを指定します。このオプションを never に設定すると(デフォルト)、サーバはクライアントに証明書を求めません。設定を allow にすると、サーバはクライアント証明書を要求します。証明書が与えられなかった場合にはセッションを通常どおり継続します。不正な証明書が与えられた場合には、その証明書を無視し、証明書が与えられなかったかのようにセッションを通常どおり継続します。設定を try にすると、クライアント証明書を要求します。証明書が与えられなかった場合にはセッションを通常どおり継続します。不正な証明書が与えられた場合には、すぐにセッションを停止します。設定を demand にすると、クライアント証明書を要求します。証明書が与えられなかったり、不正な証明書が与えられた場合には、すぐにセッションを停止します。


注記:SASL EXTERNAL 認証機構を TLS セッションで利用するには、クライアント証明書を要求しなければなりません。したがって、SASL EXTERNAL 認証を有効にするためには TLSVerifyClient をデフォルトでないものに設定しなければなりません。SASL EXTERNAL 機構は、適正なクライアント証明書が受け取られた場合にのみ提供されます。

12.2.2. クライアントの設定

ほとんどのクライアント設定ディレクティブはサーバのディレクティブに対応するものがあります。ディレクティブの名前はサーバのものとは違っていて、指定するファイルも ldap.conf(5) であって slapd.conf(5) ではありませんが、機能はほとんど同じです。また、これらオプションのほとんどはシステムワイドに設定されますが、ユーザごとに .ldaprc ファイルを使って設定をすべて上書きできます。

LDAP Start TLS 操作は LDAP において TLS ネゴシェーションを開始するために利用します。すべての OpenLDAP コマンドラインツールは -Z-ZZ オプションをサポートしていて、Start TLS 操作を発行するかを指定できます。-ZZ オプションを指定して場合には TLS を開始できないと処理を取り止めますが、-Z オプションでは処理を継続します。

LDAPv2 環境において TLS は普通 LDAP URI スキーム(ldap://) の代わりに LDAP Secure URI スキーム(ldaps://)を使って開始します。 OpenLDAP コマンドラインツールでは -U フラグと ldap.conf(5) の URI ディレクティブで、どちらのスキームも利用できます。

12.2.2.1. TLS_CACERT <filename>

これはサーバの TLSCACertificateFile ディレクティブと同じです。 TLS の設定の節に記述のあるとおり、クライアントはたいていサーバよりも多くの CA を知っている必要がありますが、その点を除けばサーバ側と同じ考えを適用します。

12.2.2.2. TLS_CACERTDIR <path>

これはサーバの TLSCACertificatePath ディレクティブと同じです。指定するディレクトリは OpenSSL の c_rehash ユーティリティで管理されていなければなりません。

12.2.2.3. TLS_CERT <filename>

このディレクティブはクライアント証明書を保持するファイルを指定します。これはユーザごとに指定するディレクティブであるので、ユーザの .ldaprc ファイルにだけ指定できます。

12.2.2.4. TLS_KEY <filename>

このディレクティブは TLS_CERT ファイルにある証明書と対になる私有鍵を保持したファイルを指定します。このディレクティブには、サーバの TLSCertificateKeyFile で言及されているのと同じ制限があります。これもユーザごとに指定するディレクティブです。

12.2.2.5. TLS_RANDFILE <filename>

このディレクティブはサーバの TLSRandFile ディレクティブと同じです。

12.2.2.6. TLS_REQCERT { never | allow | try | demand }

このディレクティブはサーバの TLSVerifyClient ディレクティブと同じです。しかしクライアントではデフォルト値が demand であり、この設定を変更しなければならない理由は一般にはありません。