4. LDAP サーバーの運用について
4.1 LDAP サーバーのテスト運用S/MIME を使用した暗号化による送受信機能を利用するにあたって、あらかじめ LDAP サーバーに自身の公開証明書を登録しておくことにより、 メールの送受信者が前もって公開鍵の交換を行なっておかなくても、 任意の相手に暗号化メールを送信することが可能である。
このため多くの S/MIME 送信/受信エージェントでは、メール送信者の認証、 およびメール本文の復号化に使用される証明書の取得方法として、LDAP サーバーに格納された公開証明書をアクセスする方法がサポートされており、 この機能の使用が前提となっている。
本開発においても、S/MIME によるメールの暗号化および認証機能を実用的な ものとするためには、LDAP サーバーとの通信機能の実装は必須であると 考えられる。
さらに本調査では、LDAP サーバーのデーターベース的な利用方法を推し進めて、 メーリングリストのメンバー管理についても LDAP サーバーを利用する可能性 について検討した。
メンバー管理に LDAP サーバを利用する場合、現行 fml に対して 以下のような利点がある。
- メンバーの変更に関して、ロック機能など LDAP サーバーが データーベースとして備える機能を有効利用でき、安全性が高まる。
- メンバーの公開/秘匿に関するセキュリティー的な安全性が高まる。
- メーリングリスト・サーバーによる管理ファイルの書き換えが 発生しないので、セキュリティ的な安全性が高まる。
現在、LDAP サーバーの実装では、通常はプロトコル version 2 (以下、 「LDAPv2」と称する) をサポートしており、一部の実装でプロトコル version 3 (以下、「LDAPv3」と称する) をサポートしている。今後の見通しとしては、 徐々に LDAPv3 が普及していくものと見られるが、現状では LDAPv2 を使用 するのが、運用互換性の面で望ましい。
既存の代表的な LDAP サーバの実装でサポートする LDAP のプロトコル・バージョン は、以下のようになっている。
- Netscape Directory Server :
- LDAPv3形式(『userCertificate;binary』という属性名)」で 返答を返す。
- OpenLDAP Server :
- Ver 2のサーバにとって、userCertificate;binary は、単なる 属性型として扱われる。
- userCertificate における ";" の扱いが規定されているのは、 LDAPv3からである。
- LDAPv2 を規定するRFC-1777,RFC-1778 では、";"の扱いについて の記述がない。LDAPv3 では、それを利用して仕様を拡張している。
- userCertificate についてVer 2 のRFC に従うなら、RFC-1778 2.25 userCertificate の BNF に従ったコーディングがなされる べきである。
実際、LDAP Ver2 のサーバである OpenLDAP では、 userCertificate;binary の属性型に、X.509の証明書を登録できる。 また、多くのクライアントは、明示的に usercertificate;binary で問い合わせを行なう。
また、LDAP サーバーとして、フリーな実装である OpenLDAP 1.2.7 を実際に 使用して、OpenSSL と同様の環境における LDAP サーバーのテスト運用を 行なった。LDAP クライアントとしては、Netscape navigator を使用した。
その結果について、以下に報告する。
- 公開証明書の格納および取出し
- Netscape Directory Serverに X.509証明書を格納し、それを Netscape Navigator や Internet Exprolerなどから検索して取り出す 場合、以下のような条件が必要である。
- 証明書はバイナリ形式で格納する
- 証明書の「SubjectAltName」に e-mailアドレスが入っている
- 証明書を持つエントリが「rfc822MailBox」もしくは 「emailAddress」に属性値として e-mailアドレスを持っている
- LDAPv3形式で返答する(「userCertificate;binary」という属 性名で証明書を返す)
特に最後の条件については既存の実装において事実上の標準と なっていると考えられ、注意が必要である。
- アドレス帳の検索時に使用される属性
- 名前 : sn, cn, givenname
E-mailアドレス : mail
オブジェクトクラス : objectclass=personのフィルタはしていない
証明書 : userCertificate;binary, usersmimeCertificate;binary- 証明書の登録
- 認証
- まず、匿名で接続し、接続不可能でかつ「userPassword」 属性が設定されているなら、単純なクリアテキストによる 認証を行なう。 「userPassword」属性が設定されていないとエラーで終了する。
- 証明書の属性
- userCertificate;binaryではなく、userSMIMECertificate;binary で登録される。 しかし、ldapサーバからの証明書の読み込み時は、 userCertificate;binary でも良い。どちらが優先されるかは 検証できなかった。(おそらく userSMIMECertificate;binaryが 優先されると考えられる。)
- 証明書格納用のオブジェクトクラス
- inetOrgPerson : RFC2377で規定されている
- mail, userCertificate;binary, uerSMIMECertificate;binary を含んでいる。