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 を有効にするには、以下を実行します。
- Directory Server の NSS データベースがすでに存在しているかどうかを確認します。
# ls -1 /etc/dirsrv/slapd-instance_name/*.db
データベースが存在しない場合は作成します。「コマンドラインを使用した NSS データベースの作成」 を参照してください。 - 証明書を要求してインストールします。
- 認証局 (CA) が発行する証明書の場合:
- Certificate Signing Request (CSR) を生成します。「コマンドラインを使用した証明書署名要求の作成」を参照してください。
- CA 証明書をインポートします。「コマンドラインを使用した CA 証明書のインストール」を参照してください。
- CA が発行するサーバー証明書をインポートします。「コマンドラインを使用したサーバー証明書のインストール」を参照してください。
- 自己署名証明書は、「自己署名証明書の生成およびインストール」を参照してください。
- TLS を有効にし、LDAPS ポートを設定します。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=config changetype: modify replace: nsslapd-securePort nsslapd-securePort: 636 - replace: nsslapd-security nsslapd-security: on
- NSS データベースのサーバー証明書のニックネームを表示します。
# certutil -L -d /etc/dirsrv/slapd-instance_name/ Certificate Nickname Trust Attributes SSL,S/MIME,JAR/XPI Example CA CT,, server-cert u,u,u
次の手順でニックネームが必要です。 - RSA 暗号ファミリーを有効にするには、NSS データベースセキュリティーデバイスおよびサーバー証明書のニックネームを設定し、次のエントリーをディレクトリーに追加します。
# ldapadd -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=RSA,cn=encryption,cn=config cn: RSA objectClass: top objectClass: nsEncryptionModule nsSSLToken: internal (software) nsSSLPersonalitySSL: server-cert nsSSLActivation: on
注記デフォルトでは、NSS データベース内のセキュリティーデバイスの名前は internal (software) です。cn=RSA,cn=encryption,cn=config エントリーがすでに存在しているため、上記のコマンドが失敗する場合は、対応する属性を更新します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=RSA,cn=encryption,cn=config changetype: modify replace: nsSSLToken nsSSLToken: internal (software) - replace: nsSSLPersonalitySSL nsSSLPersonalitySSL: server-cert - replace: nsSSLActivation nsSSLActivation: on
- 必要に応じて、Directory Server がサポートする暗号化の一覧を更新します。詳細は「コマンドラインを使用した Directory Server が使用する暗号の表示および設定」を参照してください。
- 必要に応じて、証明書ベースの認証を有効にします。詳細は「証明書ベースのクライアント認証の使用」を参照してください。
- 必要に応じて、パスワードファイルを作成して、NSS データベースのパスワードを要求せずに Directory Server が起動するようにします。詳細は「Directory Server のパスワードファイルの作成」を参照してください。
- Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name
NSS データベースにパスワードを設定し、パスワードファイルを作成しないと、Directory Server は NSS データベースのパスワードを要求します。詳細は「パスワードファイルなしで Directory Server の起動」を参照してください。 - 必要に応じて、サーバーへの接続時に Directory Server Console が TLS を使用するようにします。「コマンドラインを使用したコンソールから Directory Server への接続に対する TLS の有効化」 を参照してください。
- 必要に応じて、Red Hat Identity Management Console が TLS を使用するように TLS を有効にします。「管理サーバーでの TLS の有効化」 を参照してください。
9.4.1.2. コンソールを使用した Directory Server での TLS の有効化
コンソールを使用して Directory Server で TLS を有効にするには、以下を実行します。
- CSR を作成します。「コンソールを使用した証明書署名要求の作成」 を参照してください。
- 認証局 (CA) 証明書をインポートします。「コンソールを使用した CA 証明書のインストール」 を参照してください。
- CA が発行するサーバー証明書をインポートします。「コンソールを使用した証明書のインストール」 を参照してください。
- Directory Server コンソールを開き、Configuration タブでホスト名を選択します。
- 右側のペインの Settings タブで LDAPS ポートを Encrypted port フィールドに入力し、 ボタンをクリックします。LDAPS のデフォルトポートは 636 です。注記LDAPS ポートは、ポート フィールドの 暗号化されていない接続に設定されたセットとは異なる必要があります。
- 右側のペインの Encryption タブで、以下を実行します。
- このサーバーの Enable SSL を選択します。
- Use this cipher family: RSA。 一覧からセキュリティーデバイスおよび証明書を選択します。
- 必要に応じて、「コンソールを使用した Directory Server が使用する暗号の表示および設定」 を参照してください。ボタンをクリックして、Directory Server がサポートする暗号化の一覧を更新します。詳細は、
- 必要に応じて、ユーザーが証明書を使用して認証できるようにします。詳細は「証明書ベースのクライアント認証の使用」を参照してください。重要TLS が Directory Server でのみ有効で、Directory Server コンソールではない場合は、Require client authentication を選択しないでください。
- アウトバウンド SSL 接続オプションに対して証明書の名前に対して Check host name を選択し、認証用にクライアントが提示する証明書のサブジェクト名の
cn
属性と一致することを確認します。重要Red Hat は、中間者攻撃(MITM)に対して発信 TLS 接続を保護するために、レプリケーション環境でこのオプションを有効にすることを推奨します。 - Use SSL in Console オプションが選択されていないことを確認します。警告この手順を終了する前に、Use SSL in Console オプションを有効にしないでください。設定を保存すると直ちに反映されるためです。これにより、コンソールがサーバーへの接続に失敗します。このオプションを誤って有効にし、コンソールがサーバーへの接続に失敗した場合には、コマンドラインを使用してオプションを無効にします。
# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=slapd-instance_name,cn=Red Hat Directory Server, cn=Server Group,cn=server.example.com,ou=example.com,o=NetscapeRoot changetype: modify replace: nsServerSecurity nsServerSecurity: off
- 必要に応じて、パスワードファイルを作成して、NSS データベースのパスワードを要求せずに Directory Server が起動するようにします。詳細は「Directory Server のパスワードファイルの作成」を参照してください。
- Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name
NSS データベースにパスワードを設定し、パスワードファイルを作成しないと、Directory Server は NSS データベースのパスワードを要求します。詳細は「パスワードファイルなしで Directory Server の起動」を参照してください。 - 必要に応じて、サーバーへの接続時に Directory Server Console が TLS を使用するようにします。「コンソールを使用したコンソールから Directory Server への接続に対する TLS の有効化」 を参照してください。
- 必要に応じて、Red Hat Identity Management Console が TLS を使用するようにします。「管理サーバーでの TLS の有効化」 を参照してください。
9.4.1.3. 暗号化暗号の設定
Directory Server は異なる暗号に対応し、その暗号化を有効または無効にできます。暗号化は、暗号化で使用されるアルゴリズムです。クライアントがサーバーとの TLS 接続を開始すると、クライアントは情報の暗号化を好む暗号をサーバーに指示します。サーバーがこれらの暗号のいずれかに対応する場合は、このアルゴリズムを使用して暗号化された接続を確立できます。
「TLS の有効化」に従って暗号化を有効にすると、Directory Server が使用する暗号化を表示および更新できます。
9.4.1.3.1. コマンドラインを使用した Directory Server が使用する暗号の表示および設定
利用可能なすべての暗号の表示
Directory Server で対応可能なすべての暗号の一覧を表示するには、次のコマンドを実行します。
# ldapsearch -xLLL -H ldap://server.example.com:389 -D "cn=Directory Manager" -W \ -b 'cn=encryption,cn=config' -s base nsSSLSupportedCiphers -o ldif-wrap=no dn: cn=encryption,cn=config nsSSLSupportedCiphers: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256::AES-GCM::AEAD::128 ... nsSSLSupportedCiphers: SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5::RC2::MD5::128
これは、有効または無効にできる暗号だけ含まれる一覧になります。この一覧には、Directory Server が現在使用している暗号は表示されません。
使用する暗号ディレクトリーサーバーの表示
Directory Server が現在使用中の暗号は、
nsSSLEnabledCiphers
の読み取り専用属性に保存されます。それらを表示するには、次のコマンドを実行します。
# ldapsearch -xLLL -H ldap://server.example.com:389 -D "cn=Directory Manager" -W \ -b 'cn=encryption,cn=config' -s base nsSSLEnabledCiphers -o ldif-wrap=no dn: cn=encryption,cn=config nsSSLEnabledCiphers: TLS_RSA_WITH_AES_256_CBC_SHA::AES::SHA1::256 nsSSLEnabledCiphers: TLS_RSA_WITH_AES_128_CBC_SHA::AES::SHA1::128 ...
さらに、有効/無効にするように設定された暗号を表示できます。
# ldapsearch -xLLL -H ldap://server.example.com:389 -D "cn=Directory Manager" -W \ -b 'cn=encryption,cn=config' -s base nsSSL3Ciphers -o ldif-wrap=no dn: cn=encryption,cn=config nsSSL3Ciphers: -all,+tls_rsa_aes_128_sha,+tls_rsa_aes_256_sha,...
重要
Directory Server は、
nsSSL3Ciphers
属性からの設定を使用して、実際に使用されている暗号の一覧を生成します。ただし、nsSSL3Ciphers
で弱い暗号化を有効にし、allowWeakCiphers
パラメーターをデフォルトの off に設定した場合、Directory Server は強力な暗号化のみを使用し、nsSSLSupportedCiphers
読み取り専用属性に表示します。
有効な暗号リストの更新
有効な暗号の一覧を更新するには、次のコマンドを実行します。
- 現在有効な暗号の一覧を表示します。「使用する暗号ディレクトリーサーバーの表示」を参照してください。
- 特定の暗号のみを有効にするには、
nsSSL3Ciphers
属性を更新します。たとえば、TLS_RSA_WITH_AES_128_GCM_SHA256
暗号のみを有効にするには、次のコマンドを実行します。# ldapmodify -D "cn=Directory Manager" -W -p 389 -h server.example.com -x dn: cn=encryption,cn=config changetype: modify add: nsSSL3Ciphers nsSSL3Ciphers: -all,+TLS_RSA_WITH_AES_128_GCM_SHA256
- Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name
- 必要に応じて、有効な暗号の一覧を表示して、結果を確認します。「使用する暗号ディレクトリーサーバーの表示」を参照してください。
9.4.1.3.2. コンソールを使用した Directory Server が使用する暗号の表示および設定
コンソールを使用して暗号を選択し、必要に応じて更新するには、以下を実行します。
- Directory Server コンソールを開きます。
- Configuration タブでサーバー名を選択します。
- 右側のペインで Encryption タブを選択し、 ボタンをクリックします。
- 必要に応じて、暗号の一覧を更新します。以下に例を示します。
- 暗号の一覧を更新した場合は、Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name
9.4.1.4. パスワードファイルなしで Directory Server の起動
暗号化を有効にし、NSS データベースに設定したパスワードを使用して Directory Server を起動する場合は、以下を行います。
- systemctl コマンドで ns-slapd Directory Server プロセスが起動すると、
systemd
はパスワードを求めるプロンプトを表示し、その入力内容を systemd-tty-ask-password-agent ユーティリティーに自動的に渡します。以下に例を示します。# systemctl start dirsrv 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 は警告をログに記録し、サービスを起動します。この動作を変更するには、cn=config エントリーの
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 に設定します。# ldapmodify -D "cn=Directory Manager" -W -p 636 -h server.example.com -x dn: cn=config changetype: modify replace: nsslapd-validate-cert nsslapd-validate-cert: on
- Directory Server インスタンスを再起動します。
# systemctl restart dirsrv@instance_name