CentOS7 OpenLDAPをSSL対応

スポンサーリンク

■OpenLDAPのSSL対応

認証連携でOpenLDAPと連携するシステムは多々あると思うのですが、連携元システムがLDAPクライアント、連携先サーバ ( OpenLDAPサーバ ) はLDAPサーバとなり、この両者の通信を暗号化することがセキュリティ上は望ましいと思われます。


ただ、不特定多数からアクセスしてくるわけではなく、決まったクライアントからしかアクセスはないので有料の証明書を使うのではなく、オレオレ証明書を利用してお金をかけずに対応しているところがほとんどです。

■サーバ証明書の作成

CentOS6までは自己認証局をたててCA証明書の作成から行っていましたが、CentOS7ではこのやり方ではうまくいきませんでした。CentOS7ではCA証明書に関してはプレインストールされているものを使用しますので下記のコマンドで所定の位置にコピー致します。

# cp /etc/pki/tls/certs/ca-bundle.crt /etc/openldap/certs/


続いてサーバ証明書を作成するための秘密鍵を作成します。

# cd /etc/pki/tls/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:[パスフレーズ入力]


これでカレントディレクトリにserver.keyというファイルが生成されます。この秘密鍵を使用するには毎回上記で入力したパスフレーズを聞かれますので再入力しなくて良いようにパスフレーズを外しておきます。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:[パスフレーズ入力]
writing RSA key


さらにこの秘密鍵を元に証明書を発行するためのCSRを以下のコマンドで作成します。入力項目はそれぞれの環境に合わせて入力してください。

# make server.csr
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -out server.csr
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) [XX]:JP
State or Province Name (full name) []:Kagawa
Locality Name (eg, city) [Default City]:Takamatsu
Organization Name (eg, company) [Default Company Ltd]:UnixPower
Organizational Unit Name (eg, section) []:UnixPower
Common Name (eg, your name or your server's hostname) []:www.unix-power.net
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


これでカレントディレクトリにserver.csrが作成されます。これを用いて自己署名した証明書を発行します。下記では証明書の有効期限を10年間に設定しています。

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


これで出来上がったserver.crtがサーバ証明書となります。

■OpenLDAPサーバの設定

slapd.confの設定を修正しSSL対応にします。設定ファイルの中に上記で作成した証明書や秘密鍵の指定を以下の構文で指定します。

# vi /etc/openldap/slapd.conf

# The next three lines allow use of TLS for encrypting connections using a
# dummy test certificate which you can generate by running
# /usr/libexec/openldap/generate-server-cert.sh. Your client software may balk
# at self-signed certificates, however.
#TLSCACertificatePath /etc/openldap/certs
#TLSCertificateFile "\"OpenLDAP Server\""
#TLSCertificateKeyFile /etc/openldap/certs/password

TLSCACertificateFile /etc/openldap/certs/ca-bundle.crt
TLSCertificateFile /etc/openldap/certs/server.crt
TLSCertificateKeyFile /etc/openldap/certs/server.key

そしてslapdの起動オプションを変更してTLS対応で起動するよう以下のファイルを編集します。

# vi /etc/sysconfig/slapd

SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"


そしてslapdを再起動してldapsで起動しているか確認します。

# systemctl restart slapd.service 
# netstat -a | grep ldaps
tcp        0      0 0.0.0.0:ldaps           0.0.0.0:*               LISTEN

■OpenLDAPクライアントの設定

クライアントの設定は/etc/openldap/ldap.confにて行います。オレオレ証明書なので警告がでるのですが、それを無視するよう下記の設定を追加しておきます。

# vi /etc/openldap/ldap.conf

TLS_REQCERT     never

実際にldapsearchコマンドでldapsを指定し検索することができるか試してみます。-hでは単にホストのIPを指定すれば良かったのですが、ldapsでURI指定を行うため-Hオプションを使用しています。下記のように検索結果が表示されればOKです。

# ldapsearch -H "ldaps://127.0.0.1" -x -W -D "cn=search001,dc=unix-power,dc=net" \
-b "ou=Users,dc=unix-power,dc=net" -s sub
Enter LDAP Password:[パスワード入力]
# extended LDIF
#
# LDAPv3
# base <ou=Users,dc=unix-power,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# Users, unix-power.net
dn: ou=Users,dc=unix-power,dc=net
objectClass: organizationalUnit
ou: Users

# takeda, Users, unix-power.net
dn: uid=takeda,ou=Users,dc=unix-power,dc=net
objectClass: posixAccount
objectClass: inetOrgPerson
sn: takeda
cn: kazuma
displayName: Takeda Kazuma
uid: takeda
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/takeda
loginShell: /bin/bash
userPassword:: e0NSWVBUfUI1Zkt6bHdmYXR1eTI=
mail: takeda@unix-power.net

# suzuki, Users, unix-power.net
dn: uid=suzuki,ou=Users,dc=unix-power,dc=net
objectClass: posixAccount
objectClass: inetOrgPerson
sn: suzuki
cn: hajime
displayName: Suzuki Hajime
uid: suzuki
uidNumber: 1001
gidNumber: 1000
homeDirectory: /home/suzuki
loginShell: /bin/bash
userPassword:: e0NSWVBUfUI1Zkt6bHdmYXR1eTI=
mail: suzuki@unix-power.net

# tanaka, Users, unix-power.net
dn: uid=tanaka,ou=Users,dc=unix-power,dc=net
objectClass: posixAccount
objectClass: inetOrgPerson
sn: tanaka
cn: takuya
displayName: Tanaka Takuya
uid: tanaka
uidNumber: 1002
gidNumber: 1000
homeDirectory: /home/tanaka
loginShell: /bin/bash
userPassword:: e0NSWVBUfUI1Zkt6bHdmYXR1eTI=
mail: tanaka@unix-power.net

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

参考URL : http://www.server-world.info/query?os=CentOS_7&p=openldap&f=4

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする