12. TLS の使用法
OpenLDAP のクラアントとサーバは
12.1. TLS の証明書
TLS は、クライアントとサーバのアイデンティティを伝えるのに
12.1.1. サーバ証明書
サーバ証明書の DN は、サーバを指定するのに CN 属性を利用しなければならず、CN はサーバの完全修飾されたドメイン名にしなければなりません。さらに、別命とワイルドカードを subjectAltName 証明書拡張領域に置けます。サーバ証明書の名前についてより詳しくは RFC2830 を参照してください。
12.1.2. クライアント証明書
クライアント証明書の DN は、認証 DN として直に利用できます。 X.509 は
12.2. TLS の設定
必要な証明書を得た後、TLS を有効にし、証明書を利用するようにするには、クライアントとサーバに多くのオプションの設定をしねければなりません。最低限、クライアントは信頼できる
典型的に単一の CA がサーバ証明書と信頼されるクライアント証明書のすべてを発行するので、サーバだけが CA の署名による信頼が必要です。しかし、クライアントが別の組織によって管理されていて、多くの別の CA によって生成された証明書を持つ安全なサーバのいろいろに接続したい場合があります。そのような場合、クライアントは多くの別の信頼された CA のリストを設定ファイルに必要とすることはありえます。
12.2.1. サーバの設定
slapd の設定ディレクティブは slapd.conf(5) のグローバル設定ディレクティブのセクションに属します。
12.2.1.1. TLSCACertificateFile <filename>
このディレクティブは、slapd が信頼する CA の証明書を含んだ
12.2.1.2. TLSCACertificatePath <path>
TLSCACertificateFile directive instead. このディレクティブは、個々の
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 コマンドラインツールは
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 であり、この設定を変更しなければならない理由は一般にはありません。