この章の焦点は、デジタル証明書を LDAP サーバ内に発行する方法にあります。 Certification Authority (認証局) を運営するならデジタル証明書を発行する必要が あります。LDAP への発行は、この情報をネットワーク内で利用できるようにする シンプルな方法のひとつです。また、証明書対応ソフトウェアの多くも、 望ましいレポジトリとして、ユーザ証明書に LDAP を用いています。
この方法ではユーザ証明書を他のユーザ情報と一緒にしておけるので、 データの無駄な複製が必要なくなります。
証明書を取り扱うには暗号ツールキットが必要です。 ここで使用するのは OpenSSL です。
ここで使用する LDAP サーバは OpenLDAP 2.0.x です。
LDAP サーバは、証明書を記録するための属性を持てる objectclass をサポートしていなくてはなりません。 LDAP サーバ内には特に、認証局証明書、証明書破棄リスト、認可破棄リスト、 そしてエンドユーザの証明書を記録しておく必要があります。
certificationAuthority という objectclass は authorityRevocationList (つまり認可破棄リスト), certificateRevocationList (証明書破棄リスト), cACertificate (認証局証明書) という属性を実装します。
inetOrgPerson という objectclass は usercertificate (ユーザ証明書) という (バイナリの) 属性をサポートします。
また、strongAuthenticationUser という混合 objectclass を使って、非 inetOrgPerson エントリに 証明書を付けることもできます。
下記のスキーマを自分の slapd.conf ファイルに 含めて、必要なスキーマを OpenLDAP にインクルードしてください。
include /usr/local/etc/openldap/schema/core.schema include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema |
証明書は ASN.1 の DER (Distinguished Encoding Rules) を使って エンコードされます。 そのため LDAP サーバ内にはバイナリデータで (BER エンコードで) 発行されなくてはなりません。
PEM 証明書は、このように OpenSSL を使って DER 書式に変換できます。
openssl x509 -outform DER -in incert.pem -out outcert.der |
そうすると、OpenLDAP によって提供される ldif というユーティリティを使って LDIF ファイルを作成できます。こうです。
ldif -b "usercertificate;binary" < outcert.der > cert.ldif |
このコマンドは BASE64 でエンコードされた usercertificate 属性を 作成します。このように証明書を LDIF エントリに追加できますので、それから ldapmodify を使って (訳注:サーバ上の) エントリに 証明書を追加できます。
ldapmodify -x -W -D "cn=Manager,dc=yourorg,dc=com" -f cert.ldif |
この cert.ldif は、次のようなものを含んでいます。
dn: cn=user,ou=people,dc=yourorg,dc=com changetype: modify add: usercertificate usercertificate;binary:: MIIC2TCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQQFADBGMQswCQYD VQQGEwJJVDENMAsGA1UEChMESU5GTjESMBAGA1UECxMJQXV0aG9yaXR5MRQwEgYDVQQDEwtJTkZO IENBICgyKTAeFw05OTA2MjMxMTE2MDdaFw0wMzA4MDExMTE2MDdaMEYxCzAJBgNVBAYTAklUMQ0w CwYDVQQKEwRJTkZOMRIwEAYDVQQLEwlBdXRob3JpdHkxFDASBgNVBAMTC0lORk4gQ0EgKDIpMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrHdRKJsobcjXz/OsGjyq8v73DbggG3JCGrQZ9f1Vm 9RrIWJPwggczqgxwWL6JLPKglxbUjAtUxiZm3fw2kX7FGMUq5JaN/Pk2PT4ExA7bYLnbLGZ9jKJs Dh4bNOKrGRIxRO9Ff+YwmH8EQdoVpSRFbBpNnoDIkHLc4DtzB+B4wwIDAQABo4HWMIHTMAwGA1Ud EwQFMAMBAf8wHQYDVR0OBBYEFK3QjOXGc4j9LqYEYTn9WvSRAcusMG4GA1UdIwRnMGWAFK3QjOXG c4j9LqYEYTn9WvSRAcusoUqkSDBGMQswCQYDVQQGEwJJVDENMAsGA1UEChMESU5GTjESMBAGA1UE CxMJQXV0aG9yaXR5MRQwEgYDVQQDEwtJTkZOIENBICgyKYIBADALBgNVHQ8EBAMCAQYwEQYJYIZI AYb4QgEBBAQDAgAHMAkGA1UdEQQCMAAwCQYDVR0SBAIwADANBgkqhkiG9w0BAQQFAAOBgQCDs5b1 jmbIYVq2epd5iDjQ109SJ/V7b6DFw2NIl8CWeDPOOjL1E5M8dnlmCDeTR2TlBxqUZaBBJZPqzFdv xpxqsHC0HfkCXAnUe5MaefFNAH9WbxoB/A2pkXtT6WGWed+QsL5wyKJaO4oD9UD5T+x12aGsHcsD Cy3EVEaGEOl+/A== |
また、LDIF ファイル内で証明書をこのように指定することも可能です。
userCertificate;binary:< file:///path/to/cert.der |
サーバに証明書を記録してから、 それをどうやって取り出すのか不思議に思うかもしれません。
他のクライアントと同様、Netscape は LDAP サーバから 自動的に証明書を取り出す機能をサポートしています。 「セキュリティ → ユーザ証明書 → ディレクトリを検索」とすることで、 LDAP ディレクトリ内の証明書を検索して、それを Netscape 証明書データベースに 自動でインストールすることができるのです。
この他に、証明書へのサポートの良いクライアントには web2ldap (www.web2ldap.de) があります。