■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