9.4. TLS の有効化
Directory Server は、クライアントとサーバーとの間で暗号化された接続と、レプリケーション環境でののサーバー間の暗号化をサポートします。このため、Directory Server は以下に対応します。
- LDAPS プロトコル: TLS 暗号化は接続が確立された後に直接使用されます。
- LDAP プロトコルの STARTTLS コマンド: 接続は、クライアントが STARTTLS コマンドを送信するまで暗号化されません。
重要
セキュリティー上の理由から、Red Hat は TLS 暗号化を有効にすることを推奨します。
バインド識別名 (DN) およびパスワード、または証明書ベースの認証を使用して、簡易認証で TLS を使用できます。
Directory Server の暗号化サービスは、Mozilla Network Security Services (NSS) (TLS およびベース暗号化機能のライブラリー) によって提供されます。NSS には、連邦情報処理標準 (FIPS) 140-2 認定であるソフトウェアベースの暗号化トークンが含まれています。
9.4.1. Directory Server での TLS の有効化
本セクションでは、Directory Server で TLS を有効にする方法を説明します。
9.4.1.1. コマンドラインを使用した Directory Server での TLS の有効化
コマンドラインで TLS を有効にするには、以下を実行します。
- 証明書を要求してインストールします。
- 認証局 (CA) が発行する証明書の場合:
- Certificate Signing Request (CSR) を生成します。「コマンドラインを使用した証明書署名要求の作成」を参照してください。
- CA 証明書をインポートします。「コマンドラインを使用した CA 証明書のインストール」を参照してください。
- CA が発行するサーバー証明書をインポートします。「コマンドラインを使用したサーバー証明書のインストール」を参照してください。
- 自己署名証明書は、「自己署名証明書の生成およびインストール」を参照してください。
- TLS を有効にし、LDAPS ポートを設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-securePort=636 nsslapd-security=on Successfully replaced "nsslapd-securePort" Successfully replaced "nsslapd-security"
- NSS データベースでサーバー証明書名を表示します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate list Certificate Name: Server-Cert Subject DN: CN=server.example.com Issuer DN: CN=Example CA Expires: 2022-07-29 11:10:14 Trust Flags: ,,
次の手順でニックネームが必要です。 - RSA 暗号ファミリーを有効にするには、NSS データベースセキュリティーデバイスおよびサーバー証明書名を設定します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security rsa set --tls-allow-rsa-certificates on --nss-token "internal (software)" --nss-cert-name Server-Cert
注記デフォルトでは、NSS データベースのセキュリティーデバイスの名前は internal (software) です。 - 必要に応じて、Directory Server がサポートする暗号化のリストを更新します。詳細については、「コマンドラインを使用した Directory Server が使用する暗号の表示および設定」 を参照してください。
- 必要に応じて、証明書ベースの認証を有効にします。詳細については、「証明書ベースのクライアント認証の使用」 を参照してください。
- 必要に応じて、パスワードファイルを作成して、NSS データベースのパスワードを要求せずに Directory Server が起動するようにします。詳細については、「Directory Server のパスワードファイルの作成」 を参照してください。
- Directory Server インスタンスを再起動します。
# dsctl instance_name restart
NSS データベースにパスワードを設定し、パスワードファイルを作成しないと、Directory Server は NSS データベースのパスワードを要求します。詳細については、「パスワードファイルなしで Directory Server の起動」 を参照してください。
9.4.1.2. Web コンソールを使用した Directory Server での TLS の有効化
Web コンソールを使用して Directory Server で TLS を有効にするには、以下を行います。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- CSR を作成します。「証明書署名要求の作成」を参照してください。
- 認証局 (CA) 証明書をインポートします。「Web コンソールを使用した CA 証明書のインストール」を参照してください。
- CA が発行するサーバー証明書をインポートします。「Web コンソールを使用したサーバー証明書のインストール」を参照してください。
- Security エントリーを選択します。メニューを開き、
- Security Configuration タブで以下を行います。
- Security Enabled をクリックします。
- Server Certificate Name フィールドで証明書のニックネームを選択します。
- 必要に応じて、サーバーが対応する最小および最大の TLS バージョンの設定を変更します。
- 必要に応じて、クライアントが証明書を使用して認証できるように、クライアント認証を設定します。詳細については、「証明書ベースのクライアント認証の使用」 を参照してください。
- 必要に応じて、パスワードファイルを作成して、NSS データベースのパスワードを要求せずに Directory Server が起動するようにします。詳細については、「Directory Server のパスワードファイルの作成」 を参照してください。
- Directory Server インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。NSS データベースにパスワードを設定し、パスワードファイルを作成しないと、Directory Server は NSS データベースのパスワードを要求します。詳細については、「パスワードファイルなしで Directory Server の起動」 を参照してください。
9.4.1.3. 暗号化暗号の設定
Directory Server は異なる暗号に対応し、その暗号化を有効または無効にできます。暗号化は、暗号化で使用されるアルゴリズムです。クライアントがサーバーとの TLS 接続を開始すると、クライアントは情報の暗号化を好む暗号をサーバーに指示します。サーバーがこれらの暗号のいずれかに対応する場合は、このアルゴリズムを使用して暗号化された接続を確立できます。
「TLS の有効化」に従って暗号化を有効にすると、Directory Server が使用する暗号化を表示および更新できます。
9.4.1.3.1. デフォルトの暗号の表示
cn=encryption,cn=config エントリーで
nsSSL3Ciphers
パラメーターが設定されていない場合、Directory Server は Network Security Service (NSS) のデフォルトの暗号を使用します。デフォルトの暗号を表示するには、次のコマンドを実行します。
# /usr/lib64/nss/unsupported-tools/listsuites | grep -B1 --no-group-separator "Enabled" TLS_AES_128_GCM_SHA256: 0x1301 TLS 1.3 TLS 1.3 AES-GCM 128 AEAD Enabled FIPS Domestic TLS_CHACHA20_POLY1305_SHA256: 0x1303 TLS 1.3 TLS 1.3 CHACHA20POLY1305 256 AEAD Enabled Domestic ...
9.4.1.3.2. コマンドラインを使用した Directory Server が使用する暗号の表示および設定
利用可能なすべての暗号の表示
Directory Server で対応可能なすべての暗号のリストを表示するには、次のコマンドを実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ciphers list --supported TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ...
これは、有効または無効にできる暗号だけ含まれるリストになります。このリストには、Directory Server が現在使用している暗号は表示されません。
使用する暗号ディレクトリーサーバーの表示
Directory Server が現在使用中の暗号を表示するには、以下を入力します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ciphers list --enabled TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 ...
さらに、有効/無効にするように設定された暗号を表示できます。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ciphers list default +tls_rsa_aes_128_sha +tls_rsa_aes_256_sha ...
default
キーワードは、NSS が提供する推奨のデフォルト暗号を参照します。「デフォルトの暗号の表示」を参照してください。
重要
Directory Server は、
nsSSL3Ciphers
属性からの設定を使用して、実際に使用されている暗号の一覧を生成します。ただし、nsSSL3Ciphers
で弱い暗号化を有効にし、allowWeakCiphers
パラメーターをデフォルトの off に設定した場合、Directory Server は強力な暗号化のみを使用し、nsSSLSupportedCiphers
読み取り専用属性に表示します。
有効な暗号リストの更新
有効な暗号のリストを更新するには、次のコマンドを実行します。
- 現在有効な暗号のリストを表示します。「使用する暗号ディレクトリーサーバーの表示」を参照してください。
- 特定の暗号のみを有効にするには、
nsSSL3Ciphers
属性を更新します。たとえば、TLS_RSA_WITH_AES_128_GCM_SHA256
暗号のみを有効にするには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com security ciphers set "-all,+TLS_RSA_WITH_AES_128_GCM_SHA256"
- Directory Server インスタンスを再起動します。
# dsctl instance_name restart
- 必要に応じて、有効な暗号のリストを表示して、結果を確認します。「使用する暗号ディレクトリーサーバーの表示」を参照してください。
9.4.1.3.3. Web コンソールを使用した Directory Server が使用する暗号の表示および設定
Web コンソールを使用して暗号を選択し、必要に応じて更新するには、以下を行います。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Security エントリーを選択します。メニューを開き、
- Cipher Preferences タブで、Directory Server では、現在有効な暗号が表示されます。
- デフォルトとは異なる暗号を使用する場合は、Ciphers Suite フィールドで Default Ciphers を選択し、デフォルトの暗号化を自動的に有効にします。詳細については、「デフォルトの暗号の表示」 を参照してください。または、暗号スイート を以下に設定できます。
- すべての暗号を有効にする All Ciphers。必要に応じて、Deny Specific Ciphers フィールドで特定の暗号を無効にします。
- すべての暗号を無効にする場合は No Ciphers。必要に応じて、Allow Specific Ciphers フィールドで特定の暗号を有効にします。
- 暗号のリストを更新した場合は、Directory Server インスタンスを再起動します。「Web コンソールを使用した Directory Server インスタンスの起動および停止」を参照してください。
9.4.1.4. パスワードファイルなしで Directory Server の起動
暗号化を有効にし、NSS データベースに設定したパスワードを使用して Directory Server を起動する場合は、以下を行います。
- systemctl コマンドで ns-slapd Directory Server プロセスが起動すると、
systemd
はパスワードを求めるプロンプトを表示し、その入力内容を systemd-tty-ask-password-agent ユーティリティーに自動的に渡します。以下に例を示します。# systemctl start dirsrv@instance_name Enter PIN for Internal (Software) Token:
- まれに、ns-slapd Directory Server プロセスが systemctl ユーティリティーにより開始されず、ターミナルから切り離されていると、wall コマンドを使用してすべての端末にメッセージを送信します。以下に例を示します。
Broadcast message from root@server (Fri 2017-01-01 06:00:00 CET): Password entry required for 'Enter PIN for Internal (Software) Token:' (PID 1234). Please enter password with the systemd-tty-ask-password-agent tool!
パスワードを入力するには、次を実行します。# systemd-tty-ask-password-agent Enter PIN for Internal (Software) Token:
9.4.1.5. Directory Server のパスワードファイルの作成
暗号化が有効で、NSS データベースに設定したパスワードがあると、サービスの起動時に Directory Server はこのパスワードを要求します。「パスワードファイルなしで Directory Server の起動」を参照してください。
このプロンプトを省略するには、NSS データベースパスワードを
/etc/dirsrv/slapd-instance_name/pin.txt
ファイルに保存できます。これにより、このパスワードを要求せずに Directory Server が自動的に起動できます。
警告
パスワードはクリアテキストで保存されます。サーバーがセキュアでない環境で実行している場合は、パスワードファイルを使用しないでください。
パスワードファイルを作成するには、以下を実行します。
- 以下の内容で
/etc/dirsrv/slapd-instance_name/pin.txt
ファイルを作成します。- NSS ソフトウェア暗号モジュールを使用する場合は、以下になります。
Internal (Software) Token:password
- Hardware Security Module (HSM) を使用する場合:
name_of_the_token:password
- パーミッションを設定します。
# chown dirsrv:dirsrv /etc/dirsrv/slapd-instance_name/pin.txt # chmod 400 /etc/dirsrv/slapd-instance_name/pin.txt
9.4.1.6. 証明書の有効期限が切れた場合の Directory Server の動作の管理方法
デフォルトでは、暗号化が有効で、証明書の有効期限が切れると、Directory Server は警告をログに記録し、サービスを起動します。この動作を変更するには、
nsslapd-validate-cert
パラメーターを設定します。以下の値を設定できます。
- warn: Directory Server インスタンスが起動し、期限切れの証明書に関する警告を
/var/log/dirsrv/slapd-instance_name/error
ログファイルに記録します。これはデフォルト設定です。 - on: Directory Server は証明書を検証し、証明書の有効期限が切れると、インスタンスの起動に失敗します。
- off: Directory Server は証明書の有効期限を検証しません。インスタンスが起動し、警告は記録されません。
例9.3 証明書の有効期限が切れると Directory Server が起動しないようにする
証明書の有効期限が切れている場合は Directory Server が起動しないようにするには、次を実行します。
nsslapd-validate-cert
パラメーターを on に設定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-validate-cert=on Successfully replaced "nsslapd-validate-cert"
- Directory Server インスタンスを再起動します。
# dsctl instance_name restart
9.4.2. Directory Server が使用する CA 証明書の Red Hat Enterprise Linux のトラストストアへの追加
Directory Server で TLS 暗号化を有効にすると、CA が発行した証明書を使用するようにインスタンスを設定します。クライアントが LDAPS プロトコルまたは LDAP 上の STARTTLS コマンドを使用してサーバーへの接続を確立する場合、Directory Server はこの証明書を使用して接続を暗号化します。クライアントユーティリティーは CA 証明書を使用して、サーバーの証明書が有効であるかどうかを確認します。デフォルトでは、これらのユーティリティーは、サーバーの証明書を信頼していない場合に接続を取り消します。
例9.4 クライアントユーティリティーが CA 証明書を使用しない場合の接続エラーの可能性
クライアントユーティリティーが CA 証明書を使用しない場合、ユーティリティーは TLS 暗号化の使用時にサーバーの証明書を検証できません。これにより、サーバーへの接続に失敗します。以下に例を示します。
- dsconf
# dsconf -D "cn=Directory Manager" ldaps://server.example.com:636 config get Error: {'desc': "Can't contact LDAP server", 'info': 'error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed (self signed certificate in certificate chain)'}
- ldapsearch
# ldapsearch -H ldaps://server.example.com:636 -D "cn=Directory Manager" -W -b "dc=example,dc=com" -x Enter LDAP Password: ldap_sasl_bind(SIMPLE): Can't contact LDAP server (-1)
Red Hat Enterprise Linux でクライアントユーティリティーを有効にして Directory Server が使用する証明書を検証するには、オペレーティングシステムのトラストストアに CA 証明書を追加します。
- Directory Server が使用する CA 証明書のローカルコピーがない場合は、以下を実行します。
- サーバーの NSS データベースの証明書をリスト表示します。
# certutil -d /etc/dirsrv/slapd-instance_name/ -L Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Example CA C,, Server-Cert u,u,u
- NSS データベースの CA 証明書のニックネームを使用して、CA 証明書をエクスポートします。
# certutil -d /etc/dirsrv/slapd-instance_name/ -L -n "Example CA" -a > /tmp/ds-ca.crt
- CA 証明書を
/etc/pki/ca-trust/source/anchors/
ディレクトリーにコピーします。以下に例を示します。# cp /tmp/ds-ca.crt /etc/pki/ca-trust/source/anchors/
- CA 信頼データベースを再構築します。
# update-ca-trust