古い記事です
LDAPのTLS/LDAPS対応 †
GUIツール[authconfig-gtk]でLDAP認証設定を行うと、下記のような警告表示となり、TLSやLDAPSの対応が求められる。

TLSやLDAPSを使わないならauthconfig-tuiコマンドで回避する。
ここではTLSもしくはLDAPS経由でLDAPサーバと通信する方法を記述する。
TLSもしくはLDAPSに対応するには †
CA認証局で作成されたサーバ証明書「CRT(SSL Cerver Certificate)」が必要で、
LDAPサーバ側で用意したサーバ申請書「CSR(Certificate Signing Request)」を使って作成される。
このサーバ証明書「CRT」とCA認証局自身の証明書「cacert.pem」をLDAPサーバに組み込む。

LDAPクライアントにはCA認証局自身の証明書「cacert.pem」のみが必要。
0.LDAPデータのバックアップ †
/etc/openldap/slapd.d/の中身を修正するなり、ldapmodifyコマンドで調整すれば、そのままTLS/LDAPS対応へ移行できるようなのだが、ここでは登録データを一旦退避させ、対応完了後に戻す方向を取ってみる。
っで、バックアップなのだが、
[root@ldap ~]# slapcat -l backup.ldif
として採取。
1.LDAPサーバで申請書(server.csr)を作成 †
次に、CA認証局でサーバ証明書を作ってもらうための申請書を作ります。手始めにこのサイト固有の「鍵」を作成します。
いわゆる公開鍵暗号方式のための秘密鍵と公開鍵を作ります。
[root@ldap ~]# cd /etc/pki/tls/certs
[root@ldap certs]#
[root@ldap certs]# make server.key
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > server.key
Generating RSA private key, 2048 bit long modulus
...............................+++
..+++
e is 65537 (0x10001)
Enter pass phrase: *パスフレーズを入力
Verifying - Enter pass phrase: *再度パスフレーズを入力
[root@ldap certs]#
[root@ldap certs]# ls -l server.key
-rw------- 1 root root 1766 1月 26 12:19 2014 server.key *作成されたサイト固有の「秘密鍵」ファイル
[root@ldap certs]#
作成した「秘密鍵」からペアとなる「公開鍵」を作ります。
*後にLDAPサービス(/etc/init.d/slapd)の起動に「公開鍵」が使われるので
[root@ldap certs]# /usr/bin/openssl rsa -in server.key -out server.public.key
Enter pass phrase for server.key: *「秘密鍵」のパスフレーズを入力
writing RSA key
[root@ldap certs]#
[root@ldap certs]# ls -l server.*
-rw------- 1 root root 1766 2月 14 00:11 2014 server.key *秘密鍵
-rw-r--r-- 1 root root 1679 2月 14 00:16 2014 server.public.key *公開鍵
[root@ldap certs]#
次に申請書を作成します。
[root@ldap certs]# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
Enter pass phrase for server.key: *「秘密鍵」のパスフレーズ
(中略)
Country Name (2 letter code) [XX]:JP *JP
State or Province Name (full name) []:Tokyo *都道府県
Locality Name (eg, city) [Default City]:xxxxxxxx *区市町村
Organization Name (eg, company) [Default Company Ltd]:Chaperone *会社組織名
Organizational Unit Name (eg, section) []:LDAP *部署名
Common Name (eg, your name or your server's hostname) []:ldap.chaperone.jp *使用するサーバ名(FQDNで)
Email Address []:xxxxxxxxx@chaperone.jp *担当者のメールアドレス
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: *そのままリターン
An optional company name []: *そのままリターン
[root@ldap certs]#
[root@ldap certs]# ls -l server.*
-rw------- 1 root root 1058 2月 14 00:20 2014 server.csr *作成された申請書ファイル
-rw------- 1 root root 1766 2月 14 00:11 2014 server.key *秘密鍵
-rw-r--r-- 1 root root 1679 2月 14 00:16 2014 server.public.key *公開鍵
[root@ldap certs]#
作成した申請書(server.csr)をCA認証局へ送り、サーバ証明書「CRT」を作ってもらう。
[root@ldap certs]# scp server.csr root@ca:
2.CA認証局にて †
CA認証局で、送られた申請書(server.csr)からサーバ証明書(server.crt)を作成する。
[root@ca ~]# openssl ca -out /root/server.crt -infiles /root/server.csr
*ゆるゆる署名なら
[root@ca ~]# openssl ca -policy policy_anything -out /root/server.crt -infiles /root/server.csr
作ったサーバ証明書(server.crt)とCA認証局のサイト証明書をLDAPサーバ(ldap)に送り返す。
[root@ca ~]# scp /root/server.crt /etc/pki/CA/cacert.pem root@ldap:
「サーバ証明書」 「CA認証局のサイト証明書」 [LDAPサーバ]
[root@ca ~]#
LDAPクライアント(c1)には、CA認証局のサイト証明書を送ります。
[root@ca ~]# scp /etc/pki/CA/cacert.pem root@c1:
「CA認証局のサイト証明書」 [LDAPクライアント]
[root@ca ~]#
*全てのLDAPクライアントにこのCA認証局のサイト証明書が必要なのでweb経由で取得可能とかが望ましいかと
3.再びLDAPサーバにて †
LDAPサービスを停止させて、LDAPデータベースを破棄します。
[root@ldap ~]# /etc/init.d/slapd stop
[root@ldap ~]# rm -rf /etc/openldap/slapd.d/*
[root@ldap ~]# rm -rf /var/lib/ldap/*
slapd.confに修正を加えます。修正個所はTLSCACertificatePath、TLSCertificateFile、TLSCertificateKeyFileです。
[root@ldap ~]# vi /etc/openldap/slapd.conf
TLSCACertificatePath /etc/openldap/certs *CA認証局のサイト証明書のありか
TLSCertificateFile /etc/openldap/certs/server.crt *サーバ証明書
TLSCertificateKeyFile /etc/openldap/certs/server.public.key *LDAPサーバの公開鍵
slapd.confの修正に適合するようにファイルを配置させます。
[root@ldap ~]# cp /root/cacert.pem /etc/openldap/certs/
[root@ldap ~]# cp /root/server.crt /etc/openldap/certs/server.crt
[root@ldap ~]# cp /etc/pki/tls/certs/server.public.key /etc/openldap/certs/server.public.key
slapd.confファイルの適合性テイストを実施して
[root@ldap ~]# slaptest -f /etc/openldap/slapd.conf -u
config file testing succeeded
[root@ldap ~]#
LDAPのデータベースを再構築
[root@ldap ~]# cp -a /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@ldap ~]# echo "" | slapadd -f /etc/openldap/slapd.conf
The first database does not allow slapadd; using the first available one (2)
[root@ldap ~]# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
config file testing succeeded
[root@ldap ~]#
4.LDAPデータのリストア †
っで、バックアップしていたLDAPデータを元に戻す。
[root@ldap ~]# slapadd -l backup.ldif
The first database does not allow slapadd; using the first available one (2)
-#################### 100.00% eta none elapsed 04s spd 872.5 /s
Closing DB...
[root@ldap ~]#
[root@ldap ~]# chown -R ldap:ldap /etc/openldap/slapd.d
[root@ldap ~]# chown -R ldap:ldap /var/lib/ldap
リストアが完了したらLDAPS通信を可能にさせるべく調整を施してLDAP再開
[root@ldap ~]# vi /etc/sysconfig/ldap
SLAPD_LDAP=yes *TLS通信の際は必須(ポート番号389を使ってTLS通信する)
SLAPD_LDAPS=yes *LDAPS通信の際は必須(ポート番号636を使ってLDAPS通信する)
[root@ldap ~]#
[root@ldap ~]# /etc/init.d/slapd start
slapd を起動中: [ OK ]
[root@ldap ~]#
これでTLS/LDAPS対応のLDAPサービスが利用可能となる。
5.LDAPクライアントにて †
TLSもしくはLDAPSのどちらか一方を使ってLDAPサーバと通信することになる。両方使っての通信って設定できるけど、繋がらないし意味不明なお話。GUIで設定した方が簡単なので authconfig-gtk を起動。
まず、TLSで通信なら「TLSを使用して接続を暗号化する」を有効にして、LDAPサーバの指定は「ldap://ldap.chaperone.jp」とする。
ldap.chaperone.jpのFQDNは、サーバ申請書(server.cs)作成時に記載したCommon Nameである。

次に、LDAPS通信なら「TLSを使用して接続を暗号化する」を無効にして、LDAPサーバの指定は「ldaps://ldap.chaperone.jp」とする。
*ポート番号389を使うldapが、636を使うldapsに代わって点に留意。

両方の通信設定でもCA認証局自身の証明書ファイルは必須で、「CA証明書をダウンロードする...」ボタンをクリックして、CA認証局から入手したCA認証局自身の証明書ファイルをURLで指定します。ファイルが手元にあれば、file:///root/cacert.pemと記載する。CA認証局のwebサイトから直接取得可能であればhttp://ca.chaperone.jp/cacert.pemとかの指定でも可。

指定したCA認証局自身の証明書ファイルは、/etc/openldap/cacertsに保存される。
そして「適用」ボタンを押して、LDAPサーバからデータが取得できるかをテストしてみる。
[root@c1 ~]# getent passwd|grep foo
foo:x:3000:2001:foo chaperone:/home/foo:/bin/bash
[root@c1 ~]#
とユーザ情報は取得できて、
[foo@c ~]$ ssh -l foo c1
foo@c1's password:
Creating directory '/home/foo'.
Last login: Sat Feb 15 19:51:48 2014 from c.chaperone.jp
[foo@c1 ~]$
と認証され同時にホームディレクトリも作成された。
*ちなみにauthconfigコマンドで設定するなら、
[root@c1 ~]# authconfig \
authconfig \
--disablecache \
--enableldap \
--disablenis \
--disableipav2 \
--disablewinbind \
--disablemd5 \
--disableshadow \
--enableldapauth \
--enableldaptls \
--ldapserver=ldap://ldap.chaperone.jp/ \
--ldapbasedn=dc=chaperone,dc=jp \
--ldaploadcacert=file:///root/cacert.pem \
--disablekrb5 \
--disablefingerprint \
--disablewinbindauth \
--enablelocauthorize \
--enablemkhomedir \
--updateall
[root@c1 ~]#
となる。上記はTLS通信とした場合である。LDAPS通信にしたいのなら--enableldaptlsを--disableldaptlsに変更して、--ldapserver=ldap://ldap.chaperone.jp/も--ldapserver=ldaps://ldap.chaperone.jp/と変更する必要がある。