OpenLDAP SSL/TLSによる通信路の保護

LPIC Level3 Core(英語試験)の学習。

Linux 教科書 LPIC レベル3 」の内容に概ね従って進める。

「4.4 SSL/TLSによる通信路の保護」

SSLを用いて、LDAP通信を暗号化するように設定(ldaps通信)。

パブリックな認証局は使わない(自前の認証局も使わない)。

【参考サイト】

そろそろLDAPにしてみないか? 「第11回 OpenLDAPとSSL」

秘密鍵の生成

# cd /tmp/ssl

# openssl genrsa -out server.key -des3 2048

Generating RSA private key, 2048 bit long modulus

…..+++

…………………………+++

e is 65537 (0x10001)

Enter pass phrase for server.key:

Verifying – Enter pass phrase for server.key:

# ls -l

合計 4

-rw-r–r– 1 root root 1751  6月 23 06:01 server.key

# cat server.key

—–BEGIN RSA PRIVATE KEY—–

Proc-Type: 4,ENCRYPTED

DEK-Info: DES-EDE3-CBC,3A8D652658D374CE

ALAGuINHdXLE/7NcavlzyPcn3P47Kg/xvj1bq56u8mdxWlfkFTOjCQVS8/yODHez

tNBjm8bag8xRemtZ22RK3K/3cHw4xaG/65djOtzt/mwadsyF/tgyRJbrtZkalajj

wbGBLvIQ+M1WlDyRkz8+s2gVcSiL7i6NWdIOAaSCP4CqsMKHcOz06oJTKhXuNvFS

6jzYtZnY+Qq8/iZ8Wq8vCmGmdkBIbnnIF4BrrTVKq8+9JeYMJdLH1bMKNdej+pJL

RJlI84aYDrVVJ8cTlhweu8fnRGZuUEw1U6+OePgDrFvtFCYq12hHItUAUVmPIPwr

viesW6akIiOc/xUWTx0rXbcd/1NdEgYIG4kVg6997fnp6QnIHXcSWRXccXcPsNoA

ejJ/TD2DScR/67X8ksvO5ZilTR2CvPZrri5SirofhMMw6HcVIP0/vc/MI9qiMU76

hA95zGlNS6oxnPBAD3JjfvoG94O6MuV06YI1RgP89N0xtCdCvBtGUqNmqbM2H/bX

CgZ7aIaxt7aO6/p2Ay0gBsiUsoHeQ4/1n72o2jrz36bmjJ/p1Mq5Xd5Rc19CW2R1

/bDj3Say103aMCck4eHcd2UY2qsu2BevBEhvfLx3MBfRLZ7/B4uM72nt0MVbCDGg

XFjJZOUn9wsPgZd1WDF5jBYEiKrDtK/eEUzSjx663M0wKrq/Z5icS86zFF8vTtEX

/NJuiKf+hpyk194YT2ouYNcZHxy6Wjpn3SwLE4lrFpYnKDfWzp+4l/4sFncfB0jq

IdDV1n89Pm0wpD595FVycGvboo2550byQQaHoq+X/GGNt26K1yjZYOgPGSjga4ve

WVEye47l0ciWnKNYAo/SosIRrwfgZvBfAxiTdRS3H2KTFdPjNSFI5twa5NueQLdh

Zi1O5c9Z09Ukm0gDLf5XmV0CfdyRgD1yuSEZa2heb0YmZ4XKIa0PbbKqeaRt78sV

yy44qaycvYllR7WOqLIwcMGmj8EBsxzxcn4RgtDfcJOn4pUtUWn5VWi6dZg4CW2z

vn+ymTyGL9j4gprX5KPijAjuLwQDSxC2SuaLpu5+rO/+kYHgibrI/vxre/xXzPKo

KU7HHPuVqpX8AYwwC5TfG32HxRvcEwS10C+sFXpTdCCes/4uCPoZ72OXTUCjHTpP

xe6xYU+HiaoC9MSv5BqFzLSqyXXW6x/1Ebshe6r8wHoEI365Y5zHmRUksPfjnJbx

iXUgEhPqxcL0AyttbczlJq0GKZ1fLFqdifjNWrB6Yh1P0SEF/VX58SPWV7UuQ5bs

DoDM8CE++skM7u8RH8vRtLfnDQmnL+rZGx+xPeG7169lUq22VJmWTu/4Ywdwl6pP

GNmO+RQfiIaGtFvH1A50fm/XO/D51C95Mznl7WzNNi6YlrAN/jg74qlSmCaEVP7F

+0lA1KEQooackn7vE0UtiWodh9ESrgRz3fcvUq1MYtYJX9HIFEH/cg27fc0Pksdf

QFw5y3k7GtZ5XG3Qkt0YKsMJePb1xYefBmiXpRgTPRKZ9EvYhgdyEQma3r8yQ3jj

0b2Xf/UuZtSlhJI/tOaoFSTeUhwyUQ/DiHES1Uflp+urTKKLZa+U8OiT2dNf1q1t

—–END RSA PRIVATE KEY—–

root以外からは秘密鍵を読み込みできないように、パーミッションを変更する。

※ldapサービスは、ldapアカウントで動かすのでldapにしないといけないかも?とりあえず、このままで。

# chmod 400 server.key

# ls -l

合計 4

-r——– 1 root root 1751  6月 23 06:01 server.key

秘密鍵にパスフレーズが含まれているのは、セキュリティ上好ましいが、サーバー再起動時に各デーモンが自動で起動できなくなるなど運用上不便な面もあるようだ。

今回は、秘密鍵のパスフレーズを解除する。

# mv server.key server.key.org

# openssl rsa -in server.key.org -out server.key

Enter pass phrase for server.key.org:

writing RSA key

# ls -l

合計 8

-rw-r–r– 1 root root 1679  6月 23 06:13 server.key

-r——– 1 root root 1751  6月 23 06:01 server.key.org

# rm server.key.org

rm: remove 通常ファイル `server.key.org’? y

# chmod 400 server.key

# ls -l

合計 4

-r——– 1 root root 1679  6月 23 06:13 server.key

自己証明書を作成。

# openssl req -new -x509 -days 3650 -key server.key -out server.crt

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [GB]:JP

State or Province Name (full name) [Berkshire]:Tokyo

Locality Name (eg, city) [Newbury]:Shinjuku-ku

Organization Name (eg, company) [My Company Ltd]:KAKUYA-SHIKAKUGETS

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server’s hostname) []:kakuya

Email Address []:kakuya.my-domain.local

[root@centos5-1 ssl]#

[root@centos5-1 ssl]# ls -l

合計 8

-rw-r–r– 1 root root 1631  6月 23 06:21 server.crt

-r——– 1 root root 1679  6月 23 06:13 server.key

[root@centos5-1 ssl]# cat server.crt

—–BEGIN CERTIFICATE—–

MIIEhjCCA26gAwIBAgIJAKeGSb9M/6clMA0GCSqGSIb3DQEBBQUAMIGIMQswCQYD

VQQGEwJKUDEOMAwGA1UECBMFVG9reW8xFDASBgNVBAcTC1NoaW5qdWt1LWt1MRsw

GQYDVQQKExJLQUtVWUEtU0hJS0FLVUdFVFMxDzANBgNVBAMTBmtha3V5YTElMCMG

CSqGSIb3DQEJARYWa2FrdXlhLm15LWRvbWFpbi5sb2NhbDAeFw0xMDA2MjIyMTIx

NDdaFw0yMDA2MTkyMTIxNDdaMIGIMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9r

eW8xFDASBgNVBAcTC1NoaW5qdWt1LWt1MRswGQYDVQQKExJLQUtVWUEtU0hJS0FL

VUdFVFMxDzANBgNVBAMTBmtha3V5YTElMCMGCSqGSIb3DQEJARYWa2FrdXlhLm15

LWRvbWFpbi5sb2NhbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOKI

4vYDiiUkerBDvyYxeo1IT42Er2BWpoe+/zDXR6gBTUXCjT92pLFfyRz0Ccuv6IYZ

1ZBIKhAoDsMncvIzBl3CbXkeI6Hpmmjz8pDWpr5cUL67dCQCArHZ/iT9oeOfH+qE

yKEt5Sh6nGg2m2/tiiYGURsfAYrNqaSutW5voDXMX62Hhsxp+lhPWxHz3DxvXm15

nnwsADTVC2IH1s0a2RAnoJDRVINLN0CzGgckUKce5zNYczJe67hmEeU/GLjJYonj

tMb2ziuZ67zch1KLZXHwWeSpmXZtnejQbQ2obC+JZXsbuMTBuxX98oo68fAOmr9d

f7TRlZyBd6WaeqbN2eECAwEAAaOB8DCB7TAdBgNVHQ4EFgQU8Q3GIvISGPx5hTk8

Vn/Ejqv2hzswgb0GA1UdIwSBtTCBsoAU8Q3GIvISGPx5hTk8Vn/Ejqv2hzuhgY6k

gYswgYgxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIEwVUb2t5bzEUMBIGA1UEBxMLU2hp

bmp1a3Uta3UxGzAZBgNVBAoTEktBS1VZQS1TSElLQUtVR0VUUzEPMA0GA1UEAxMG

a2FrdXlhMSUwIwYJKoZIhvcNAQkBFhZrYWt1eWEubXktZG9tYWluLmxvY2FsggkA

p4ZJv0z/pyUwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaVTKSRpM

sVwHVt53ikSpwmcjwxcnXSScCSd3eMJYVYuWJ7cEq3Z9OyaQ8V/lSz5HM4/TGWjN

1KGXisfM6JiJlkZw82SR6/syLz7/ARhpIyaEkr6P+GGWxrMElyCRp6ZJdWt8Y+z7

wW+Bg/1rgfF/DlqDI531I9ZPKWjNu84BHbuhr7i9NrdG4GB8eXphgojHysLWuEBS

88HI+4SK41OPsvVQ1kMRa+DmPxYQdDPQ3D9rzKi4OvCXhAhpJC/sWWuTqEwYcaGV

e2cbgX60uOwu7y60iKPwJUDJ4zI6XRftMOOO/efw3K2xbBDxpoEFPrjU8n2JLcK/

7aknQj20uNhC7g==

—–END CERTIFICATE—–

秘密鍵と証明書を、便宜上/etc/openldap/配下へコピーする

# cp -p {server.crt,server.key} /etc/openldap/.

# ls -l /etc/openldap/

合計 24

drwxr-xr-x 2 root root 4096  1月 21  2009 cacerts

-rw-r–r– 1 root root  329  6月 14 21:15 ldap.conf

-rw-r–r– 1 root root 1631  6月 23 06:21 server.crt

-r——– 1 root root 1679  6月 23 06:13 server.key

OpenLDAPでSSL/TLSを利用するには、slapd.confに以下の設定を行う。

(編集前にファイルのバックアップはとっておこう。)

以下を追記する

# cp -p /usr/local/etc/openldap/slapd.conf /usr/local/etc/openldap/slapd.conf.bak

# vi /usr/local/etc/openldap/slapd.conf

#Add by Kakuya for SSL

TLSCertificateFile /etc/openldap/server.crt

TLSCertificateKeyFile /etc/openldap/server.key

#TLSCACertificateFile /etc/openldap/cacart.pem ←認証局の証明書も使う場合は指定する

で、構文チェックしてslapdを起動する。

# slaptest

bdb_monitor_db_open: monitoring disabled; configure monitor database to enable

config file testing succeeded

# /usr/local/libexec/slapd -u ldap

# ps aux | grep slapd

root      4158  0.0  0.1   4984   760 pts/2    R+   07:19   0:00 grep slapd

slapdが動かない。

とりあえず、ログを確認

# tail – 100 /var/log/slapd_log

Jun 25 07:16:19 centos5-1 slapd[4071]: line 64 (access to attrs=userPassword by * auth)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 65 (access to * by * read)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 68 (sasl-host       centos5-1.manjin.local)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 69 (sasl-realm      my-domain.com)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 73 (authz-regexp uid=([^.]*),cn=.*,cn=auth uid=$1,ou=People,dc=my-domain,dc=com)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 81 (database        bdb)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 82 (suffix          “dc=my-domain,dc=com”)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 83 (rootdn          “cn=Manager,dc=my-domain,dc=com”)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 84 (rootpw ***)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 88 (rootpw ***)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 92 (directory       /usr/local/var/openldap-data)

Jun 25 07:16:19 centos5-1 slapd[4071]: line 96 (index   objectClass     eq,pres)

Jun 25 07:16:19 centos5-1 slapd[4071]: index objectClass 0x0006

Jun 25 07:16:19 centos5-1 slapd[4071]: line 97 (index   ou,cn,mail,surname,givenname    eq,pres,sub)

Jun 25 07:16:19 centos5-1 slapd[4071]: index ou 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index cn 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index mail 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index sn 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index givenName 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: line 98 (index   uidNumber,gidNumber,loginShell  eq,pres)

Jun 25 07:16:19 centos5-1 slapd[4071]: index uidNumber 0x0006

Jun 25 07:16:19 centos5-1 slapd[4071]: index gidNumber 0x0006

Jun 25 07:16:19 centos5-1 slapd[4071]: index loginShell 0x0006

Jun 25 07:16:19 centos5-1 slapd[4071]: line 99 (index   uid,memberUid                   eq,pres,sub)

Jun 25 07:16:19 centos5-1 slapd[4071]: index uid 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index memberUid 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: line 100 (index  nisMapName,nisMapEntry          eq,pres,sub)

Jun 25 07:16:19 centos5-1 slapd[4071]: index nisMapName 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: index nisMapEntry 0x0716

Jun 25 07:16:19 centos5-1 slapd[4071]: main: TLS init def ctx failed: -1

Jun 25 07:16:19 centos5-1 slapd[4071]: slapd stopped.

Jun 25 07:16:19 centos5-1 slapd[4071]: connections_destroy: nothing to destroy.

なんか、”main: TLS init def ctx failed: -1″とか出ている。

とりあえず、心当たりのあるところを修正。秘密鍵と自己証明書のオーナー(とグループ)をrootからldapに変更する。

# cd /etc/openldap/

# ls -l

合計 24

drwxr-xr-x 2 root root 4096  1月 21  2009 cacerts

-rw-r–r– 1 root root  329  6月 14 21:15 ldap.conf

-rw-r–r– 1 root root 1631  6月 23 06:21 server.crt

-r——– 1 root root 1679  6月 23 06:13 server.key

# chown ldap:ldap ./server.*

# ls -l

合計 24

drwxr-xr-x 2 root root 4096  1月 21  2009 cacerts

-rw-r–r– 1 root root  329  6月 14 21:15 ldap.conf

-rw-r–r– 1 ldap ldap 1631  6月 23 06:21 server.crt

-r——– 1 ldap ldap 1679  6月 23 06:13 server.key

#

もう一度、slapdを起動してみる。

# /usr/local/libexec/slapd -u ldap

# ps aux | grep slapd

ldap      4761  0.0  0.7  19632  3904 ?        Ssl  07:30   0:00 /usr/local/libexec/slapd -u ldap

root      4779  0.0  0.1   4984   764 pts/2    R+   07:31   0:00 grep slapd

#

起動できた。

LDAPでのSSL/TTL(ldaps)接続用ポート(636番ポート)が待受状態(LISTEN)になっているか確認する。

# netstat -an | egrep “389|636”

tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN

tcp        0      0 :::389                      :::*                        LISTEN

LDAPでのSSL/TTL用636番ポートがLISTEN状態になっていない。

起動するときに以下のように指定しないといけないようだ。

# /usr/local/libexec/slapd -u ldap -h ‘ldap:/// ldaps:///’

LDAPサービスを再起動して、もう一度LISTENポートを確認

# netstat -an | egrep “389|636”

tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN

tcp        0      0 0.0.0.0:636                 0.0.0.0:*                   LISTEN

tcp        0      0 :::389                      :::*                        LISTEN

tcp        0      0 :::636                      :::*                        LISTEN

636番でも待ち受けされるようになった。

クライアントからの接続確認。

ldapsearchコマンドに-Hオプションをつけて検索してみる。

# # ldapsearch -x -LLL -H ‘ldaps://127.0.0.1/’ -b ‘dc=my-domain,dc=com’ ‘(uid=kakuya)’

ldap_sasl_bind(SIMPLE): Can’t contact LDAP server (-1)

接続できない。

正当な認証局の証明書を使わずに、自己証明書のみを使用した場合、

デフォルトのクライアント設定では、ldaps通信ができないようだ。

なので、クライアントの設定を変更する。

# vi /usr/local/etc/openldap/ldap.conf

#Add by kakuya

URI ldap://127.0.0.1/

BASE dc=my-domain,dc=com

TLS_REQCERT     never    ←追記

上記の設定で、クライアントは接続先の正当性を確認しなくなる。

もう一度、接続を試みる。成功した。

# ldapsearch -x -LLL -H ‘ldaps://127.0.0.1/’ -b ‘dc=my-domain,dc=com’ ‘(uid=kakuya)’

dn: uid=kakuya,ou=People,dc=my-domain,dc=com

uid: kakuya

cn: kakuya

objectClass: account

objectClass: posixAccount

objectClass: shadowAccount

shadowLastChange: 14779

shadowMax: 99999

shadowWarning: 7

uidNumber: 501

gidNumber: 501

homeDirectory: /home/kakuya

本当にldaps通信になっているかは、パケットをキャプチャして確認しよう。

続いて、StartTLSを使ってみる。

LDAPサーバ側でldaps通信用の636番ポートが待受状態になっていなくても、

クライアント側からStartTLS拡張操作を行うことで、ldaps通信が可能になる。

クライアントコマンドで-Zオプションを使う。

事前準備として、LDAPサーバで636番ポートを待受状態にしない。

# ps aux | grep slapd

ldap      5089  0.0  1.0  59696  5248 ?        Ssl  07:42   0:00 /usr/local/libexec/slapd -u ldap -h ldap:/// ldaps:///

root      6210  0.0  0.1   4984   780 pts/2    R+   08:15   0:00 grep slapd

# kill 5089

# /usr/local/libexec/slapd -u ldap

# netstat -an | egrep “389|636”

tcp        0      0 0.0.0.0:389                 0.0.0.0:*                   LISTEN

tcp        0      0 :::389                      :::*                        LISTEN

unix  2      [ ]         DGRAM                    13895

まずは、StartTLS拡張操作を行わず(-Zオプションを付けず)にldaps通信ができるかどうか確認する。

# ldapsearch -x -LLL -H ‘ldaps://127.0.0.1/’ -b ‘dc=my-domain,dc=com’ ‘(uid=kakuya)’

ldap_sasl_bind(SIMPLE): Can’t contact LDAP server (-1)

できない。

続いて、-Zオプションを付けて接続できるか確認する。ldaps://はldap://にすること。

# ldapsearch -x -LLL -Z -H ‘ldap://127.0.0.1/’ -b ‘dc=my-domain,dc=com’ ‘(uid=kakuya)’

dn: uid=kakuya,ou=People,dc=my-domain,dc=com

uid: kakuya

cn: kakuya

objectClass: account

objectClass: posixAccount

objectClass: shadowAccount

shadowLastChange: 14779

shadowMax: 99999

shadowWarning: 7

uidNumber: 501

gidNumber: 501

homeDirectory: /home/kakuya

できた。本当に389番ポートで暗号通信がなされているかは、パケットをキャプチャして確認しよう。

タイトルとURLをコピーしました