LDAPのTLS/LDAPS対応

GUIツール[authconfig-gtk]でLDAP認証設定を行うと、下記のような警告表示となり、TLSやLDAPSの対応が求められる。
2012y12m24d_234045669.png
TLSやLDAPSを使わないならauthconfig-tuiコマンドで回避する。

ここではTLSもしくはLDAPS経由でLDAPサーバと通信する方法を記述する。

TLSもしくはLDAPSに対応するには

CA認証局で作成されたサーバ証明書「CRT(SSL Cerver Certificate)」が必要で、
LDAPサーバ側で用意したサーバ申請書「CSR(Certificate Signing Request)」を使って作成される。

このサーバ証明書「CRT」CA認証局自身の証明書「cacert.pem」をLDAPサーバに組み込む。
2014y01m26d_112052165.png
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である。
2014y02m15d_032115778.png

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

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


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2014-02-18 (火) 23:54:00 (1192d)