Fedora 8 で Fedora Directory Server 1.1 を SSL に対応させる

Fedora Directory Server 1.1 を SSL 通信に対応させます。詳しくは http://directory.fedoraproject.org/wiki/Howto:SSL に書かれています。

CA の作成、CA の証明書の作成、サーバの証明書の作成

念のためディレクトリサーバのディレクトリ /etc/dirsrv/slapd-hoge をバックアップしておきます。

# cd /etc/dirsrv
# cp -a slapd-hoge slapd-hoge.bak

CA の作成、CA の証明書の作成、サーバの証明書の作成などを一括してやってくれるスクリプト http://directory.fedoraproject.org/download/setupssl2.sh をダウンロードし、適当なディレクトリに保存します。なお、このスクリプトを利用するための条件は以下の通りです。

  1. openldap-clients パッケージがインストールされ、かつ which ldapmodify でフルパス名が返ることを確認します。見つからなければ /usr/bin を環境変数 PATH に追加します。
  2. ディレクトリサーバがデフォルトのポート(389)で動作していることを確認します。異なる場合はスクリプトの修正が必要です。
  3. hostname --fqdn コマンドが FQDN を返すことを確認します。うまく動かない場合はスクリプトの修正が必要です。
  4. Directory Manager の cn が cn=Directory Manager であることを確認します。異なる場合はスクリプトの修正が必要です。

スクリプトは root で実行します。

# sh setupssl2.sh /etc/dirsrv/slapd-hoge/
Using /etc/dirsrv/slapd-hoge/ as sec directory
No CA certificate found - will create new one
No Server Cert found - will create new one
No Admin Server Cert found - will create new one
Creating password file for security token
Creating noise file
Creating new key and cert db
Creating encryption key for CA


Generating key.  This may take a few moments...

Creating self-signed CA certificate


Generating key.  This may take a few moments...

Exporting the CA certificate to cacert.asc
Exporting the CA key/cert to cacert.p12
pk12util: PKCS12 EXPORT SUCCESSFUL
Generating server certificate for Fedora Directory Server on host hoge.example.com
Using fully qualified hostname hoge.example.com for the server name in the server cert subject DN
Note: If you do not want to use this hostname, edit this script to change myhost to the
real hostname you want to use


Generating key.  This may take a few moments...

Creating the admin server certificate


Generating key.  This may take a few moments...

Exporting the admin server certificate pk12 file
pk12util: PKCS12 EXPORT SUCCESSFUL
Creating pin file for directory server
Creating key and cert db for admin server admin-serv-
Importing the admin server key and cert (created above)
pk12util: PKCS12 IMPORT SUCCESSFUL
Importing the CA certificate from cacert.asc
Creating the admin server password file
Enabling SSL in the directory server - when prompted, provide the directory manager password
Enter LDAP Password: 
modifying entry "cn=encryption,cn=config"

modifying entry "cn=config"

adding new entry "cn=RSA,cn=encryption,cn=config"

Done.  You must restart the directory server and the admin server for the changes to take effect.

このスクリプトにより、/etc/dirsrv/slapd-hoge 以下のファイルは以下のようになります。

  1. cert8.db: orig-cert8.db としてバックアップが作成され、更新
  2. key3.db: orig-key3.db としてバックアップされ、更新
  3. dse.ldif: 更新。dse.ldif.startOK に古いのが残っている
  4. certmap.conf: 変更なし
  5. secmod.db: 変更なし
  6. slapd-collations.conf: 変更なし
  7. admin-serv-cert8.db: 新規作成
  8. admin-serv-key3.db: 新規作成
  9. adminserver.p12: 新規作成
  10. cacert.asc: 新規作成
  11. cacert.p12: 新規作成
  12. noise.txt: 新規作成
  13. password.conf: 新規作成
  14. pin.txt: 新規作成
  15. pwdfile.txt: 新規作成

このほか、cn=config 以下のいくつかのエントリが書き換わります。

具体的にどのような証明書が生成されたかは certutil -L でわかります。

# certutil -L -d /etc/dirsrv/slapd-host
CA certificate                                               CTu,u,u
server-cert                                                  u,u,u
Server-Cert                                                  u,u,u

3つの証明書があることがわかります。それぞれの証明書を表示するには -n に続けて証明書の名前を指定します。

# certutil -L -d /etc/dirsrv/slapd-host -n "Server-Cert"

ここでは以下のようになっていました。

  1. CA certificate: CA の証明書
  2. server-cert: Fedora Administration Server の証明書
  3. Server-Cert: Fedora Directory Server の証明書

ディレクトリサーバを再起動します。

# service dirsrv restart

LDAP クライアントへの証明書のインストール

OpenLDAP の ldapsearch で接続できるか確認します。

まず、/etc/openldap/ldap.conf を修正します。

URI ldap://hoge.example.com
BASE dc=hoge,dc=example,dc=com
HOST hoge.example.com
TLS_CACERTDIR /etc/openldap/cacerts

次に、/etc/openldap/cacerts/ 以下に CA の証明書を用意します。/etc/dirsrv/slapd-hoge/cacert.asc の形式を変換します。

# cd /etc/dirsrv/slapd-hoge/
# openssl x509 -hash -in cacert.asc > /etc/openldap/cacerts/`openssl x509 -noout -hash -in cacert.asc`.0

そして、ldapsearch をやってみます。

# ldapsearch -x -LLL -ZZ -h hoge.example.com -b "dc=hoge,dc=example,dc=com"

Fedora Directory Server が稼働しているホストの FQDN を指定しないとエラーになります。localhost なんかもだめです。

証明書の有効期限について

# certutil -L -d /etc/dirsrv/slapd-host -n "Server-Cert"

として証明書を表示すると

        Validity:
            Not Before: Sat Mar 29 12:35:17 2008
            Not After : Thu Mar 29 12:35:17 2018

10年間有効になっていることがわかります。