9.3. Directory Server が使用する NSS データベースの管理
TLS による暗号化または証明書ベースの認証を使用するには、Network Security Services (NSS) データベースで証明書を管理する必要があります。インスタンスを作成すると、
dscreate
ユーティリティーは /etc/dirsrv/slapd-instance_name/
ディレクトリーにこのデータベースを自動的に作成し、強力なパスワードで保護します。このユーティリティーは、パスワードを /etc/dirsrv/slapd-instance_name/pwdfile.txt
ファイルに保存します。Directory Server はこのファイルを使用しないことに注意してください。dscreate
ユーティリティーは、管理者にパスワードを提供するためだけにこのファイルを作成しました。パスワードの変更方法は、「NSS データベースのパスワードの変更」を参照してください。
本セクションでは、Directory Server の NSS データベース管理に関する最も一般的なアクションを説明します。
9.3.1. 証明書署名要求の作成
証明書署名要求 (CSR) は、サーバーの鍵を署名するための認証局 (CA) への要求です。このセクションでは、秘密鍵を含む CSR を作成する方法を説明します。
注記
Directory Server は、
certutil
ユーティリティーを使用して NSS データベースへの秘密鍵と証明書および CSR を直接作成することのみをサポートします。
9.3.1.1. コマンドラインを使用した証明書署名要求の作成
キーおよび CSR を作成するには、dsctl tls generate-server-cert-csr コマンドを使用します。
# dsctl instance_name tls generate-server-cert-csr -s "certificate_subject"
dsctl tls generate-server-cert-csr コマンドは、CSR を
/etc/dirsrv/slapd-instance_name/Server-Cert.csr
ファイルに、秘密鍵を DDirectory Server のネットワークセキュリティーサービス (NSS) データベースに保存します。
例9.1 単一ホスト名の秘密鍵および CSR の作成
以下のコマンドは、
server.example.com
ホストのビット秘密鍵を生成します。
# dsctl instance_name tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization,OU=IT,ST=North Carolina,C=US"
-s
パラメーターで指定した文字列は、RFC 1485 に従って有効なサブジェクト名である必要があります。CN
フィールドが必要で、サーバーの完全修飾ドメイン名 (FQDN) に設定する必要があります。その他のフィールドは任意です。
例9.2 マルチホームホストの秘密鍵および CSR の作成
Directory Server ホストに複数の名前がある場合は、CSR の SAN 拡張で、すべてのホスト名を持つ CSR を作成します。以下のコマンドは、ビットの秘密鍵と、ホスト名
server.example.com
および server.example.net
の CSR を作成します。
# dsctl instance_name tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization,OU=IT,ST=North Carolina,C=US" server.example.com server.example.net
最後のパラメーターとしてホスト名を指定した場合、lpmp コマンドは DNS:server.example.com, DNS:server.example.net エントリーで SAN 拡張を CSR に追加します。
-s
パラメーターで指定した文字列は、RFC 1485 に従って有効なサブジェクト名である必要があります。CN
フィールドが必要で、サーバーの FQDN のいずれかに設定する必要があります。その他のフィールドは任意です。
CSR を生成した後、それを CA に送信し、発行された証明書を取得します。詳細は、CA のドキュメントを参照してください。
9.3.2. CA 証明書のインストール
Directory Server が認証局 (CA) を信頼できるようにするには、CA の証明書を Network Security Services (NSS) データベースにインストールする必要があります。このプロセスでは、CA が発行する証明書を信頼すべてきかどうかを設定する必要があります。
表9.1 CA 信頼オプション
Web コンソールオプション | dsconf および certutil オプション | 説明 |
---|---|---|
(C) 信頼できる CA | C,, | サーバーは、レプリケーションパートナーへの暗号化された接続を確立するために使用する証明書を検証し、信頼できる CA により発行されていることを確認します。 |
(T) 信頼できる CA クライアント認証 | T,, | サーバーは、TLS EXTERNAL バインドに適したクライアント証明書を発行するためにこの CA 証明書を信頼します。 |
CA に両方のオプションを設定できます。
certutil
を使用する場合は、-T "CT,,"
パラメーターをユーティリティーに渡します。
9.3.2.1. コマンドラインを使用した CA 証明書のインストール
CA 証明書をインストールするには、以下を実行します。
- CA 証明書をインポートします。たとえば、
/root/ca.crt
ファイルに保存されている CA 証明書をインポートし、Example CA
のニックネームでデータベースに保存するには、次のコマンドを実行します。# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate add --file /root/ca.crt --name "Example CA"
- 信頼オプションを設定します。たとえば、CT,, t 信頼フラグを設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
9.3.2.2. Web コンソールを使用した CA 証明書のインストール
Web コンソールを使用して CA 証明書をインストールするには、以下を実行します。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Security エントリーを選択します。
- Certificate Management タブを開き、Trusted Certificate Authorities サブタブを選択します。
- Add CA Certificate をクリックします。
- CA 証明書ファイルへのパスと証明書のニックネームを入力します。
図9.1 CA 証明書の追加
注記CA 証明書は Directory Server ホストにローカルに保存され、dirsrv
ユーザーが読み取り可能でなければなりません。 - Add Certificate をクリックします。
- インポートされた CA 証明書の横にある Actions をクリックし、Edit Trust Flags を選択します。
- SSL 列で、(C) - Trusted CA および (T)- Trusted CA Client Auth を選択します。
図9.2 CA 証明書の信頼フラグの追加
9.3.3. 秘密鍵およびサーバー証明書のインポート
このセクションでは、外部ツールを使用して NSS データベースで秘密鍵および秘密鍵と証明書署名要求 (CSR) を作成していない場合に、秘密鍵と証明書署名要求 (CSR) の両方をインポートする方法を説明します。
NSS データベースで秘密鍵および CSR を作成した場合は、「サーバー証明書のインストール」で説明されている手順に従います。
/root/server.crt
から証明書をインポートし、/root/server.key
ファイルから秘密鍵をインポートするには、以下を入力します。
# dsctl instance_name tls import-server-key-cert /root/server.crt /root/server.key
dsctl tls import-server-key-cert コマンドには、以下の順序でパスが必要なことに注意してください。
- サーバー証明書へのパス。
- 秘密鍵ファイルへのパス。
9.3.4. サーバー証明書のインストール
認証局 (CA) が要求された証明書を発行したら、Network Security Services (NSS) データベースにインストールする必要があります。
NSS データベースにない秘密鍵と証明書署名要求を作成している場合は、「秘密鍵およびサーバー証明書のインポート」で説明されている手順に従ってください。
9.3.4.1. コマンドラインを使用したサーバー証明書のインストール
Directory Server の NSS データベースにサーバー証明書をインストールするには、
certutil
ユーティリティーを使用します。以下に例を示します。
- CA 証明書をインストールします。「CA 証明書のインストール」を参照してください。
- サーバー証明書をインポートします。たとえば、
/root/instance_name.crt
ファイルに保存されている証明書をインポートし、インスタンスが使用するプライマリー証明書として設定します。# dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate add --file /root/instance_name.crt --name "Server-Cert" --primary-cert
9.3.4.2. Web コンソールを使用したサーバー証明書のインストール
Web コンソールを使用してサーバー証明書をインストールするには、以下を実行します。
- CA 証明書をインストールします。「CA 証明書のインストール」を参照してください。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Security エントリーを選択します。
- Certificate Management タブを開き、サブタブの TLS Certificates を選択します。
- Add Server Certificate をクリックします。
- CA 証明書ファイルのパスおよび証明書のニックネームを入力します。
図9.3 サーバー証明書の追加
注記サーバー証明書は Directory Server ホストにローカルに保存され、dirsrv
ユーザーが読み取り可能でなければなりません。 - Add Certificate をクリックします。
9.3.5. 自己署名証明書の生成およびインストール
dscreate
ユーティリティーを使用して TLS を有効にしたインスタンスを作成すると、dscreate
が自動的に作成され、自己署名証明書がインストールされます。ただし、インスタンスの作成時に TLS を有効にしなかった場合は、手動で自己署名証明書を作成およびインストールできます。
注記
この操作は、コマンドラインを使用した場合のみ実行できます。
自己署名証明書を作成してインストールするには、以下を実行します。
- ランダムなデータで関心のあるファイルを生成します。たとえば、サイズが 4096 ビットのあるファイルを生成するには、次のコマンドを実行します。
# openssl rand -out /tmp/noise.bin 4096
- 自己署名証明書を作成し、NSS データベースに追加します。
# certutil -S -x -d /etc/dirsrv/slapd-instance_name/ -z /tmp/noise.bin \ -n "Server-Cert" -s "CN=$HOSTNAME" -t "CT,C,C" -m $RANDOM \ --keyUsage digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment
Red Hat Enterprise Linux は、$HOSTNAME
変数を自動的に完全修飾ドメイン名 (FQDN) に置換え、$RANDOM
を無作為に生成した番号に置き換えます。先のコマンドで使用したパラメーターの詳細は、certutil(1) の man ページを参照してください。 - 必要に応じて、生成された証明書が自己署名されていることを確認します。
# certutil -L -d /etc/dirsrv/slapd-instance_name/ -n "Server-Cert" | egrep "Issuer|Subject" Issuer: "CN=server.example.com" Subject: "CN=server.example.com"
このコマンドの出力には、証明書の発行者とサブジェクトの両方について Directory Server ホストの FQDN が表示されるはずです。
9.3.6. 証明書の更新
証明書がまもなく期限切れになる場合は、セキュアな接続の確立を継続するのに期間で証明書を更新する必要があります。
9.3.6.1. コマンドラインでの証明書の更新
サーバー証明書を更新するには:
- 属性の暗号化を使用しない場合:
- キーサイズ、ホスト名、サブジェクトなど、同じオプションで新しい証明書署名要求 (CSR) を作成します。CSR の作成に関する詳細は、「コマンドラインを使用した証明書署名要求の作成」を参照してください。
- CA から発行した証明書を取得したら、同じニックネームを使用してデータベースにインストールします。「コマンドラインを使用した CA 証明書のインストール」を参照してください。
- インスタンスを停止します。
# dsctl instance_name stop
/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルを編集し、属性を含む次のエントリーを削除します。- cn=AES,cn=encrypted attribute keys,cn=database_name,cn=ldbm database,cn=plugins,cn=config
- cn=3DES,cn=encrypted attribute keys,cn=database_name,cn=ldbm database,cn=plugins,cn=config
重要全データベースのエントリーを削除します。nsSymmetricKey
属性を含むエントリーが/etc/dirsrv/slapd-instance_name/dse.ldif
ファイルに残されると、Directory Server は起動に失敗します。- インスタンスを起動します。
# dsctl instance_name start
Directory Server は、新たに発行した証明書を自動的に使用します。 - 属性の暗号化を使用する場合は、「属性暗号化に使用される TLS 証明書の更新」 を参照してください。
9.3.7. 証明書の削除
たとえば、証明書が公開されていないため、証明書が必要なくなった場合は、その証明書をデータベースから削除します。
9.3.7.1. コマンドラインで証明書の削除
コマンドラインで証明書を削除するには、以下を行います。
- 必要に応じて、データベースの証明書を表示します。
# 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: ,,
- 証明書を削除します。たとえば、Server-Cert ニックネームで証明書を削除するには、次を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate del Server-Cert
9.3.7.2. Web コンソールを使用した証明書の削除
Web コンソールを使用して証明書を削除するには、以下を行います。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Security エントリーを選択します。
- Certificate Management タブを開き、サブタブの TLS Certificates を選択します。
- 証明書の横にある Actions をクリックし、Delete Certificate を選択します。
- Yes をクリックします。
9.3.8. 秘密鍵の削除
たとえば、強力な鍵を作成したなどのため、秘密鍵が必要なくなった場合は、データベースから削除します。
警告
秘密鍵を削除すると、この鍵に基づく証明書は機能しなくなります。
9.3.8.1. コマンドラインでの秘密鍵の削除
秘密鍵を削除するには、次を実行します。
- 削除する鍵に基づいてすべての証明書を削除します。「証明書の削除」を参照してください。
- 必要に応じて、データベースのキーを表示します。
# certutil -d /etc/dirsrv/slapd-instance_name/ -K certutil: Checking token "NSS Certificate DB" in slot "NSS User Private Key and Certificate Services" Enter Password or Pin for "NSS Certificate DB": < 0> rsa 7a2fb6c269d83c4036eac7e4edb6aaf2ed08bc4a Server-Cert < 1> rsa 662b826aa3dd4ca7fd7e6883558cf3866c42f4e2 example-cert
- 秘密鍵を削除します。たとえば、example-cert ニックネームで秘密鍵を削除するには、次を実行します。
# certutil -d /etc/dirsrv/slapd-instance_name/ -F -n "example-cert"
9.3.9. CA 信頼オプションの変更
特定の状況では、認証局 (CA) の trust オプションを更新する必要があります。本セクションでは、この手順を説明します。
9.3.9.1. コマンドラインを使用した CA 信頼オプションの変更
CA の信頼オプションを変更するには、
--flags
パラメーターの新しいオプションを dsconf security ca-certificate set-trust-flags コマンドに渡します。
たとえば、Directory Server が
example-CA
という名前の CA が発行するクライアント証明書のみを信頼するように設定するには、以下を実行します。
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "example-CA" --flags "T,,"
--flags trust_options
パラメーターは、CA が発行し、信頼する証明書を設定します。表9.1「CA 信頼オプション」を参照してください。
9.3.9.2. Web コンソールを使用した CA 信頼オプションの変更
Web コンソールを使用して CA の信頼オプションを変更するには、以下を実行します。
- Web コンソールで Directory Server ユーザーインターフェイスを開きます。「Web コンソールを使用した Directory Server へのログイン」を参照してください。
- インスタンスを選択します。
- Server Settings メニューを開き、Security エントリーを選択します。
- Certificate Management タブを開きます。
- Trusted Certificate Authorities サブタブで、インポートした CA 証明書の横にある Actions をクリックし、Edit Trust Flags を選択します。
- 信頼フラグを選択します。以下に例を示します。
図9.4 CA 証明書の信頼フラグの設定
- Save をクリックします。
9.3.10. NSS データベースのパスワードの変更
特定の状況では、管理者が Network Security Services (NSS) データベースのパスワードを変更します。本セクションでは、この手順を説明します。
重要
パスワードファイルを使用して Directory Server が Network Security Services (NSS) データベースを自動的に開くようにするには、新しいパスワードの設定後にファイルを更新する必要があります。「Directory Server のパスワードファイルの作成」を参照してください。
9.3.10.1. コマンドラインを使用した NSS データベースのパスワードの変更
NSS データベースのパスワードを変更するには、次を実行します。
# certutil -d /etc/dirsrv/slapd-instance_name -W Enter Password or Pin for "NSS Certificate DB": 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: Re-enter password: Password changed successfully.