6.5. Red Hat Directory Server のインストール
Certificate System は、Red Hat Directory Server を使用して、システム証明書とユーザーデータを保存します。Directory Server と Certificate System の両方を、ネットワーク内の同じまたは他のホストにインストールできます。
6.5.1. Certificate System 用の Directory Server インスタンスの準備
Red Hat Directory Server をインストールするには、以下の手順を実行します。
- Directory Server を提供するサブスクリプションがホストに登録されていることを確認してください。
- Directory Server リポジトリーを有効にします。
#
subscription-manager repos --enable=dirsrv-11-for-rhel-8-x86_64-rpms
- Directory Server および openldap-clients パッケージをインストールします。
#
dnf module install redhat-ds
#
dnf install openldap-clients
- Directory Server インスタンスを設定します。
- DS 設定ファイルを生成します。たとえば、
/tmp/ds-setup.inf
:$
dscreate create-template /tmp/ds-setup.inf
- DS 設定ファイルを次のようにカスタマイズします。
$ sed -i \ -e "s/;instance_name = .*/instance_name = localhost/g" \ -e "s/;root_password = .*/root_password = Secret.123/g" \ -e "s/;suffix = .*/suffix = dc=example,dc=com/g" \ -e "s/;create_suffix_entry = .*/create_suffix_entry = True/g" \ -e "s/;self_sign_cert = .*/self_sign_cert = False/g" \ /tmp/ds-setup.inf
セットアップ
設定ファイルを指定して dscreate コマンドを使用してインスタンスを作成します。#
dscreate from-file /tmp/ds-setup.inf
詳細な手順は、『Red Hat Directory Server インストールガイド』を参照してください。
6.5.2. Directory Server での TLS サポートの有効化
本セクションでは、Certificate System と Directory Server との間で TLS を有効にする方法を説明します。すべての Certificate System コンポーネントは、TLS 暗号化接続を使用して Directory Server インスタンスと通信できます。この接続では、Certificate System コンポーネントを使用して、クライアント認証 (相互認証) を介して Directory Server を認証します。
Directory Server で TLS サポートを有効にする方法の詳細は、『Directory Server 管理ガイド』 の 『Directory Server での TLS サポートの有効化』 セクションを参照してください。
Directory Server の TLS サーバー証明書を要求および発行する方法の詳細は、『Red Hat Certificate System 管理ガイド』の『Directory Server で Certificate System が発行する証明書の使用』セクションを参照してください。
Directory Server のドキュメントで説明されているように、外部認証局 (CA) によって発行された証明書、または一時的な自己署名サーバー証明書のいずれかを使用して TLS を設定できます。ただし、Certificate System CA を設定した後、この CA を使用して証明書を発行し、Directory Server の設定時に使用した証明書に置き換えることができます。
6.5.2.1. 例の値を使用した新規 Red Hat Certificate System サブシステムでの LDAPS の有効化方法
注記
この TLS LDAP 手順を実行するときの最終的な目標は、TLS クライアント認証を介して接続することです。プロセス時、ステップごとに中間ゴールで移行する必要があります。このような目的の 1 つは、最初に実行する TLS サーバー認証を設定することです。最後に、プロセスは折り返し、完全なクライアント認証を操作可能にします。
- NSS データベースへの同時変更を回避するために、Directory Server インスタンスを停止します。
# systemctl stop dirsrv@instance_name.service
- Directory Manager のパスワードを
/etc/dirsrv/instance_name/password.txt
ファイルに保存します。以下に例を示します。# echo password > /etc/dirsrv/slapd-instance_name/password.txt # chown dirsrv.dirsrv /etc/dirsrv/slapd-instance_name/password.txt # chmod 400 /etc/dirsrv/slapd-instance_name/password.txt
- Directory Manager のパスワードを
/etc/dirsrv/instance_name/pin.txt
ファイルに保存します。以下に例を示します。# echo "Internal (Software) Token:password" > /etc/dirsrv/slapd-instance_name/pin.txt # chown dirsrv.dirsrv /etc/dirsrv/slapd-instance_name/pin.txt # chmod 400 /etc/dirsrv/slapd-instance_name/pin.txt
- NSS データベースのパスワードを設定します。
# certutil -W -d /etc/dirsrv/slapd-instance_name/ -f /etc/dirsrv/slapd-instance_name/password.txt
- Directory Server の一時的な自己署名証明書を作成します。
$
cd /etc/dirsrv/slapd-instance_name$
openssl rand -out noise.bin 2048$
certutil -S \ -x \ -d . \ -f password.txt \ -z noise.bin \ -n "DS Certificate" \ -s "CN=$HOSTNAME" \ -t "CT,C,C" \ -m $RANDOM \ -k rsa \ -g 2048 \ -Z SHA256 \ --keyUsage certSigning,keyEncipherment - Directory Server 証明書エントリーが NSS データベースで利用可能かどうかを確認します。
# certutil -L -d /etc/dirsrv/slapd-instance_name/
- 証明書をエクスポートします。
# certutil -L -d /etc/dirsrv/slapd-instance_name -n "DS Certificate" -a > ds.crt
- Directory Server 証明書が自己署名されていることを確認します。
# certutil -L -d /etc/dirsrv/slapd-instance_name -n "DS Certificate" Issuer: "CN=server.example.com" Subject: "CN=server.example.com"
- Directory Server インスタンスを停止します。
#
systemctl start dirsrv@instance_name - セキュアな接続を有効にします。
# ldapmodify -x -p 389 -h $HOSTNAME -D "cn=Directory Manager" -w password << EOF dn: cn=config changetype: modify replace: nsslapd-security nsslapd-security: on dn: cn=RSA,cn=encryption,cn=config changetype: add objectclass: top objectclass: nsEncryptionModule cn: RSA nsSSLPersonalitySSL: DS Certificate nsSSLToken: internal (software) nsSSLActivation: on EOF
- オプションで、デフォルト (636) とは異なる LDAPS ポートを設定します。
- たとえば、LDAPS ポートを 11636 に設定するには、次のようにします。
ldapmodify -x -p 389 -h $HOSTNAME -D "cn=Directory Manager" -w password << EOF dn: cn=config changetype: modify replace: nsslapd-secureport nsslapd-secureport: 11636 EOF
- この標準以外のポートの SELinux ポリシーを設定します。
# semanage port -a -t ldap_port_t -p tcp 11636
- Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name
/var/log/dirsrv/slapd- instance_name/errors
ファイルで、Directory Server が TLS モードで起動したことを確認します。[30/Jun/2016:00:23:31 +0200] - SSL alert: Security Initialization: Enabling default cipher set. [30/Jun/2016:00:23:31 +0200] - SSL alert: Configured NSS Ciphers [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_PSK_WITH_AES_128_GCM_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_AES_128_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_DSS_WITH_AES_128_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_AES_128_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_AES_256_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_DSS_WITH_AES_256_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_RSA_WITH_AES_128_GCM_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_RSA_WITH_AES_128_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_RSA_WITH_AES_128_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_RSA_WITH_AES_256_CBC_SHA: enabled [30/Jun/2016:00:23:31 +0200] - SSL alert: TLS_RSA_WITH_AES_256_CBC_SHA256: enabled [30/Jun/2016:00:23:31 +0200] SSL Initialization - Configured SSL version range: min: TLS1.0, max: TLS1.2 [30/Jun/2016:00:23:31 +0200] - 389-Directory/1.3.4.11 B2016.166.1911 starting up
openldap-clients
と NSS データベースを使用して TLS 接続を確認します。$
LDAPTLS_CACERTDIR=/etc/dirsrv/slapd-instance_name \ ldapsearch -H ldaps://$HOSTNAME:11636 \ -x -D "cn=Directory Manager" -w Secret.123 \ -b "dc=example,dc=org" -s base "(objectClass=*)"
6.5.3. Certificate System の設定の準備
の「pkispawn ユーティリティーについて」で、Certificate System と Directory Server の間で TLS を設定することを選択した場合は、Certificate System のインストール時に
pkispawn
ユーティリティーに渡す設定ファイルで次のパラメーターを使用します。
注記
最初に基本的な TLS サーバー認証接続を作成する必要があります。最後に、インストール後、接続に戻り、クライアント認証証明書を Directory Server に提示する必要があります。クライアント認証が設定されていると、
pki_ds_password
は関連なくなります。
pki_ds_database=back_end_database_name pki_ds_hostname=host_name pki_ds_secure_connection=True pki_ds_secure_connection_ca_pem_file=path_to_CA_or_self-signed_certificate pki_ds_password=password pki_ds_ldaps_port=port pki_ds_bind_dn=cn=Directory Manager
の値
pki_ds_database
parameter は、対応するサブシステムデータベースを Directory Server インスタンス上に作成するために pkispawn
ユーティリティーが使用する名前です。
pki_ds_hostname
パラメーターの値は、Directory Server インスタンスのインストール場所によって異なります。これは、「Certificate System 用の Directory Server インスタンスの準備」 および 「Directory Server での TLS サポートの有効化」 で使用される値によって異なります。
pki_ds_secure_connection=True を設定する場合、次のパラメーターを設定する必要があります。
pki_ds_secure_connection_ca_pem_file
: Directory Server の CA 証明書のエクスポートされたコピーを含むファイルのファイル名を含む完全修飾パスを設定します。このファイルは、pkispawn が
利用できるようになる前に存在している必要があります。pki_ds_ldaps_port
: Directory Server がリッスンしているセキュアな LDAPS ポートの値を設定します。デフォルトは 636 です。
6.5.4. 一時的な証明書の置き換え
注記
本セクションでは、ルート CA をインストールして実行する必要があります。インストール後に、本セクションの指示に従うように指示されます。
このセクションでは、一時的な自己署名 Directory Server 証明書を新しくインストールした CA によって発行された永続的な Directory Server 証明書に置き換えるプロセス、または古い Directory Server 証明書を新しいものに置き換えるプロセスを説明します。
- 新しい Directory Server サーバー証明書を取得します。CA が署名した新規証明書の要求を送信します。CMC メソッドを使用して新しい Directory Server 証明書を取得するには、『Red Hat Certificate System 管理ガイド』 の 『システム証明書およびサーバー証明書の取得』 を参照してください。上記のセクションで、TLS サーバー証明書の作成に関するガイダンスに従ってください。証明書を作成したら、Directory Server 証明書データベースにインポートし直す必要があります。
- NSS データベースにアクセスする前に、Directory Server インスタンスを停止します。
# systemctl stop dirsrv@instance_name
- 古い Directory Server 証明書を削除します。
# certutil -F -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate"
- 先ほどダウンロードした CA 証明書をインポートします。
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "CA Certificate" -t "CT,C,C" -a -i ca.crt -u L
- 先にダウンロードした新しい Directory Server 証明書をインポートします。
# PKICertImport -d /etc/dirsrv/slapd-instance_name -f /etc/dirsrv/slapd-instance_name/password.txt -n "DS Certificate" -t ",," -a -i ds.crt -u V
「HSM への証明書のインポート」も参照してください。 - Directory Server インスタンスを停止します。
# systemctl start dirsrv@instance_name
- PKI CA から古い Directory Server 証明書を削除します。
- Certificate System インスタンスを停止します。
# systemctl stop pki-tomcatd@instance_name.service
- 証明書を削除します。
# certutil -D -d /var/lib/pki/instance_name/alias/ -n "DS Certificate"
- Certificate System インスタンスを起動します。
# systemctl start pki-tomcatd@instance_name.service
- 新しい Directory Server 証明書が、NSS データベースにインストールされている CA で署名されていることを確認します。
- Directory Server 証明書の表示
$ certutil -L -d /etc/dirsrv/slapd-instance_name -n "DS Certificate" Issuer: "CN=CA Signing Certificate,O=EXAMPLE" Subject: "CN=server.example.com"
- 古い Directory Server 証明書が PKI NSS データベースに存在しなくなったことを確認します。
$ certutil -L -d /var/lib/pki/instance_name/alias
- Certificate System が、新しい証明書を使用して Directory Server に接続できることを確認します。
$ pki cert-find
6.5.5. TLS クライアント認証の有効化
注記
本セクションでは、ルート CA をインストールして実行する必要があります。一時的な LDAP サーバー証明書を使用している場合は、最初に 「一時的な証明書の置き換え」 で置き換えます。インストール後は、このセクションの指示に従ってください。
TLS クライアント認証を有効にすることを選択した場合は、CS サブシステムのインストール時に基本的な TLS サーバー認証を設定して実行すると、逆戻りして、特定のサブシステムから LDAP サーバーへのクライアント認証の有効化を試みることができます。
クライアント認証の設定には 2 つの部分があります。最初の部分は、TLS の相互認証を必要とする LDAP ディレクトリーを設定します。この手順は 9.8 で詳しく説明します。Red Hat Directory Server 管理ガイドで証明書ベースのクライアント認証の使用
以下の点に注意してください。
pkispawn は、
内部 Directory Server 上にpkidbuser を
すでに自動的に作成しており、アウトバウンド TLS クライアント認証に使用される CS インスタンスのサブシステム証明書 (たとえば、subsystemCert cert-pki-ca
) がユーザーエントリーに格納されています。したがって、TLS クライアント認証用に別の LDAP ユーザーまたは別の証明書を作成する必要はありません。/etc/dirsrv/slapd-instance_name/certmap.conf
のコンテンツを作成するときは、次の形式を使用します。certmap rhcs <certificate issuer DN> rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
以下に例を示します。certmap rhcs CN=CA Signing Certificate,OU=pki-tomcat-ca,O=pki-tomcat-ca-SD rhcs:CmapLdapAttr seeAlso rhcs:verifyCert on
- 設定後に、Directory Server を再起動します。
2 番目の部分は、Red Hat Certificate System インスタンスに設定を追加して、TLS 相互認証を使用して内部 LDAP サーバーと通信するために使用するポートと証明書を認識できるようにすることです。これには
、<instance directory>/<subsystem type>/conf/CS.cfg
にある RHCS インスタンスの CS.cfg
ファイルの編集が含まれます。例 :/var/lib/pki/instance_name/ca/conf/CS.cfg
CS.cfg
で、RHCS インスタンスのサブシステム証明書のニックネームを internaldb.ldapauth.clientCertNickname
に追加し、未使用の 2 つのエントリーを削除してください。
internaldb.ldapauth.bindDN internaldb.ldapauth.bindPWPrompt
以下に例を示します。
internaldb._000=## internaldb._001=## Internal Database internaldb._002=## internaldb.basedn=o=pki-tomcat-ca-SD internaldb.database=pki-tomcat-ca internaldb.maxConns=15 internaldb.minConns=3 internaldb.ldapauth.authtype=SslClientAuth internaldb.ldapauth.clientCertNickname=HSM-A:subsystemCert pki-tomcat-ca internaldb.ldapconn.host=example.com internaldb.ldapconn.port=11636 internaldb.ldapconn.secureConn=true
インストール後のステップの最後に CS インスタンスを再起動します。
注記
特定の LDAP インスタンスに一致するように、
internaldb.basedn
パラメーターおよび internaldb.database
パラメーターを設定する必要があります。
コンプライアンスのために、internaldb.ldapauth.authtype=SslClientAuth および internaldb.ldapconn.secureConn=true を設定する必要があり、
internaldb.ldapauth.clientCertNickname
NSS DB で LDAP に対して認証するには、TLS クライアント証明書のニックネームと一致する必要があります。
その他の値はすべて、環境または可用性の要件を反映するために必要に応じて変更できます。