389DSにldapsで通信する
今回は前回の続きで、CentOS7にインストールした389DSにldapsで通信する際の設定をまとめました。
ここまでの操作はこちらの記事を参照してください。
demiglacesource.hatenablog.com
まずは現状確認
Listenポートの一覧を確認してみます。
現在636ポートはListenされていませんね。
# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 128 :::389 :::*
LISTEN 0 128 :::22 :::*
当然、ldapsearchでもldapsで通信することはできません。
# ldapsearch -H ldaps://localhost -D "cn=Directory Manager" -w password -b dc=example,dc=demiglacesource,dc=net -ZZ *
ldap_start_tls: Can't contact LDAP server (-1)
それでは389DSにldapsで通信できるようにするための設定を行っていきましょう。
証明書を作成
今回はオレオレ証明書を作成します。
まずはサーバーのホスト名を確認してみましょう。
# hostname
example.demiglacesource.net
ではオレオレ証明書を作成します。
-subjのCN=の後には先ほど確認したサーバーのホスト名を入力してください。
パスワードは、証明書のパスワードとして任意の文字列を入力してください。
# cd /tmp
# openssl req -x509 -nodes -days 3650 -subj '/C=XX/L=Default City/O=Default Company Ltd/CN=example.demiglacesource.net' -newkey rsa:2048 -keyout key.pem -out cert.pem
# openssl pkcs12 -export -inkey key.pem -in cert.pem -out crt.p12 -nodes -name Server-Cert
Enter Export Password: password
Verifying - Enter Export Password: password
後の手順では、ここでできあがった crt.p12 を使います。
証明書をインポート
389DSに、先ほど作成した証明書をインポートします。
パスワードなどは、逐次入力してください。
# pk12util -i /tmp/crt.p12 -d /etc/dirsrv/slapd-example
Enter a password which will be used to encrypt your keys.
The password should be at least 8 characters long,
and should contain at least one non-alphabetic character.
Enter new password: password
Re-enter password: password
Enter password for PKCS12 file: password
pk12util: PKCS12 IMPORT SUCCESSFUL
証明書がインポートされていることを確認します。
Server-Certという名前の証明書がインポートされているため、これで問題なさそうですね。
# certutil -d /etc/dirsrv/slapd-example -L
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
Server-Cert u,u,u
TLS/SSLを有効化
389DSのTLS/SSLを有効化します。
設定はGUIのadminツールで行うか、CUIからldapmodifyで行うことができます。
今回はCUIで全てやってしまいましょう。
# vim /tmp/ssl_enable.ldif
dn: cn=encryption,cn=config
changetype: modify
replace: nsSSL3
nsSSL3: off
-
replace: nsSSLClientAuth
nsSSLClientAuth: allowed
-
add: nsSSL3Ciphers
nsSSL3Ciphers: +all
dn: cn=config
changetype: modify
add: nsslapd-security
nsslapd-security: on
-
replace: nsslapd-ssl-check-hostname
nsslapd-ssl-check-hostname: off
dn: cn=RSA,cn=encryption,cn=config
changetype: add
objectclass: top
objectclass: nsEncryptionModule
cn: RSA
nsSSLPersonalitySSL: Server-Cert
nsSSLToken: internal (software)
nsSSLActivation: on
このldifを使いldapmodifyを行います。
# ldapmodify -x -D "cn=Directory Manager" -w password -f /tmp/ssl_enable.ldif
modifying entry "cn=encryption,cn=config"
modifying entry "cn=config"
adding new entry "cn=RSA,cn=encryption,cn=config"
無事設定変更ができたようです。
パスワードファイルの作成
証明書のパスワードを書いたテキストファイルを作成します。
password の部分は証明書のパスワードが入ります。逐次読み替えてください。
# vim /etc/dirsrv/slapd-example/pin.txt
Internal (Software) Token:password
パスワードが書かれていますので、ファイルの権限を正しく設定しておきましょう。
# chmod 400 /etc/dirsrv/slapd-example/pin.txt
389DSを再起動
ここまでの設定を反映するために389DSを再起動します。
# systemctl restart dirsrv.target
動作確認
さっそくポートを確認してみましょう。
# ss -lnt
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 10 127.0.0.1:25 *:*
LISTEN 0 128 :::389 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 128 :::636 :::*
636がListenされていますね。
次にldapsearchはどうでしょうか。
# ldapsearch -D "cn=Directory Manager" -w password -b dc=example,dc=demiglacesource,dc=net -ZZ *
# ldap_start_tls: Connect error (-11)
# additional info: TLS error -8172:Peer's certificate issuer has been marked as not trusted by the user.
bindできませんね。。。
調べてみると、どうやら実行ユーザーのホームディレクトリに .ldaprc というファイルを保存しTLSを許可する設定が必要なようです。
# vim ~/.ldaprc
TLS_REQCERT allow
改めてldapsearchを行ってみます。
# ldapsearch -D "cn=Directory Manager" -w password -b dc=example,dc=demiglacesource,dc=net -ZZ *
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=demiglacesource,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: cert8.db certmap.conf dse.ldif dse.ldif.bak dse.ldif.startOK dse_original.ldif key3.db pin.txt schema secmod.db slapd-collations.conf
#
# example.demiglacesource.net
dn: dc=example,dc=demiglacesource,dc=net
[snip]
bindできました。
付録
この状態でbind時にldapsを必須化してみます。
まずはldifを作成しましょう。
# vim /tmp/require_ldaps.ldif
dn: cn=config
changetype: modify
replace: nsslapd-require-secure-binds
nsslapd-require-secure-binds: on
こいつをldapmodifyです。
# ldapmodify -x -D "cn=Directory Manager" -w password -f /tmp/require_ldaps.ldif
modifying entry "cn=config"
念のため389DSの再起動も行っておきましょう。
# systemctl restart dirsrv.target
これでldapsの状態でしか、389DSに対する操作を行えなくなりました。