4.7. 属性暗号化の管理
Directory Server は、ディレクトリー内の機密データへのアクセスを保護するための多数のメカニズムを提供します。ただし、デフォルトでは、サーバーは暗号化されていないデータをデータベースに格納します。機密性の高い情報の場合、攻撃者がデータベースにアクセスできるという潜在的なリスクは、重大なリスクになる可能性があります。
属性の暗号化機能により、管理者は特定の属性を機密データ (政府識別番号など) と共に暗号化してデータベースに保存できます。接尾辞を有効にすると、これらの属性のすべてのインスタンス (インデックスデータも含む) が、データベース内のこの属性に格納されているすべてのエントリーに対して暗号化されます。接尾辞の属性暗号化を有効にできることに注意してください。サーバー全体でこの機能を有効にするには、サーバー上の各接尾辞の属性暗号化を有効にする必要があります。属性の暗号化は、eq
および pres
インデックス作成と完全に互換性があります。
エントリーの識別名 (DN) 内で使用する属性は、効率的に暗号化できません。たとえば、uid
属性を暗号化するように設定した場合、値はエントリーでは暗号化されますが、DN では暗号化されません。
dn: uid=demo_user,ou=People,dc=example,dc=com ... uid::Sf04P9nJWGU1qiW9JJCGRg==
dn: uid=demo_user,ou=People,dc=example,dc=com
...
uid::Sf04P9nJWGU1qiW9JJCGRg==
4.7.1. Directory Server が属性の暗号化に使用するキー リンクのコピーリンクがクリップボードにコピーされました!
属性の暗号化を使用するには、TLS を使用して暗号化された接続を設定する必要があります。Directory Server は、サーバーの TLS 暗号化キーと、属性の暗号化に同じ PIN 入力方法を使用します。
サーバーは、ランダムに生成された対称暗号鍵を使用して、属性データを暗号化および復号化します。サーバーは、サーバーの TLS 証明書の公開鍵を使用してこれらの鍵をラップします。結果として、属性暗号化の有効な強度は、サーバーの TLS キーの強度より高くすることはできません。
サーバーの秘密鍵にアクセスできないと、ラップ済みのコピーから対称キーを復旧することができません。そのため、サーバーの証明書データベースを定期的にバックアップしてください。キーを紛失すると、データベースに保存されているデータを復号化および暗号化できなくなります。
4.7.2. コマンドラインを使用して属性暗号化を有効にする リンクのコピーリンクがクリップボードにコピーされました!
この手順では、コマンドラインを使用して userRoot
データベースの telephoneNumber
属性の属性暗号化を有効にする方法を示します。この手順を実行すると、サーバーはこの属性の既存の値と新しい値を AES 暗号化して格納します。
前提条件
- Directory Server で TLS 暗号化を有効にした。
手順
userRoot
データベースをエクスポートします。dsconf <instance_name> backend export -E userRoot
# dsconf <instance_name> backend export -E userRoot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーは、エクスポートを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーの LDIF ファイルに保存します。-E
オプションは、エクスポート中にすでに暗号化されている属性を復号化します。telephoneNumber
属性の AES 暗号化を有効にします。dsconf <instance_name> backend attr-encrypt --add-attr telephoneNumber dc=example,dc=com
# dsconf <instance_name> backend attr-encrypt --add-attr telephoneNumber dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスを停止します。
dsctl <instance_name> stop
# dsctl <instance_name> stop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow LDIF ファイルをインポートします。
dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
# dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --encrypted
パラメーターを使用すると、スクリプトで属性を暗号化して、インポート中に暗号化を設定できます。インスタンスを起動します。
dsctl <instance_name> start
# dsctl <instance_name> start
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7.3. Web コンソールを使用して属性暗号化を有効にする リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Web コンソールを使用して userRoot
データベースの telephoneNumber
属性の属性暗号化を有効にする方法を示します。この手順を実行すると、サーバーはこの属性の既存の値と新しい値を AES 暗号化して格納します。
Web コンソールのエクスポートおよびインポート機能は、暗号化された属性をサポートしていないことに注意してください。したがって、これらの手順はコマンドラインで実行する必要があります。
前提条件
- Directory Server で TLS 暗号化を有効にした。
- Web コンソールでインスタンスにログインしている。
手順
userRoot
データベースをエクスポートします。dsconf <instance_name> backend export -E userRoot
# dsconf <instance_name> backend export -E userRoot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーは、エクスポートを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーの LDIF ファイルに保存します。-E
オプションは、エクスポート中にすでに暗号化されている属性を復号化します。-
Web コンソールで、
に移動します。 - 暗号化する属性を入力し、 をクリックします。
- メニューで、Stop Instance を選択します。
コマンドラインで、LDIF ファイルをインポートします。
dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
# dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --encrypted
パラメーターを使用すると、スクリプトで属性を暗号化して、インポート中に暗号化を設定できます。-
Web コンソールで メニューを開き、
Start Instance
を選択します。
4.7.4. 属性暗号化の有効化後の一般的な考慮事項 リンクのコピーリンクがクリップボードにコピーされました!
データベースにすでに存在するデータの暗号化を有効にした後、次の点を考慮してください。
暗号化されていないデータは、サーバーのデータベースページプールのバッキングファイルで保持できます。このデータを削除するには、以下を実行します。
インスタンスを停止します。
dsctl <instance_name> stop
# dsctl <instance_name> stop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /var/lib/dirsrv/slapd-<instance_name>/db/guardian
ファイルを削除します。rm /var/lib/dirsrv/slapd-<instance_name>/db/guardian
# rm /var/lib/dirsrv/slapd-<instance_name>/db/guardian
Copy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスを起動します。
dsctl <instance_name> start
# dsctl <instance_name> start
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 暗号化を有効にし、データが正常にインポートされた後に、暗号化されていないデータで LDIF ファイルを削除します。
- Directory Server はレプリケーションログファイルを暗号化しません。このデータを保護するには、レプリケーションログを暗号化されたディスクに保存します。
- サーバーのメモリー (RAM) のデータは暗号化されず、swap パーティションに一時的に保存できます。このデータを保護するには、暗号化されたスワップ領域を設定します。
暗号化されていないデータを含むファイルを削除すると、このデータは特定の状況で復元できます。
4.7.5. 属性暗号化に使用される TLS 証明書の更新 リンクのコピーリンクがクリップボードにコピーされました!
属性の暗号化は、サーバーの TLS 証明書に基づいています。TLS 証明書を更新または置き換えた後に属性の暗号化が失敗しないようにするには、次の手順に従います。
前提条件
- 属性の暗号化を設定しました。
- TLS 証明書の有効期限がまもなく切れる。
手順
userRoot
データベースをエクスポートします。dsconf <instance_name> backend export -E userRoot
# dsconf <instance_name> backend export -E userRoot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーは、エクスポートを
/var/lib/dirsrv/slapd-instance_name/ldif/
ディレクトリーの LDIF ファイルに保存します。-E
オプションは、エクスポート中にすでに暗号化されている属性を復号化します。プライベートキーおよび証明書署名要求 (CSR) を作成します。外部ユーティリティーを使用して作成する場合は、この手順を省略します。
ホストが 1 つの名前のみで到達可能である場合は、以下を実行します。
dsctl <instance_name> tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization"
# dsctl <instance_name> tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 複数の名前でホストにアクセスできる場合は、以下を行います。
dsctl <instance_name> tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization" server.example.com server.example.net
# dsctl <instance_name> tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization" server.example.com server.example.net
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 最後のパラメーターとしてホスト名を指定した場合、このコマンドは
DNS:server.example.com, DNS:server.example.net
エントリーで SAN (Subject Alternative Name) 拡張を CSR に追加します。
-s subject
パラメーターで指定した文字列は、RFC 1485 に従って有効なサブジェクト名である必要があります。サブジェクトのCN
フィールドが必要で、サーバーの完全修飾ドメイン名 (FQDN) の 1 つに設定する必要があります。このコマンドは、/etc/dirsrv/slapd-<instance_name>/Server-Cert.csr
ファイルに CSR を保存します。- 認証局 (CA) に CSR を送信し、発行した証明書を取得します。詳細は、CA のドキュメントを参照してください。
CA が発行するサーバー証明書を NSS データベースにインポートします。
dsctl tls generate-server-cert-csr
コマンドを使用して秘密鍵を作成した場合は、以下を入力します。dsconf <instance_name> security certificate add --file /root/instance_name.crt --name "server-cert" --primary-cert
# dsconf <instance_name> security certificate add --file /root/instance_name.crt --name "server-cert" --primary-cert
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --name _certificate_nickname
パラメーターで設定した証明書の名前を書き留めておきます。これは後のステップで必要になります。外部ユーティリティーを使用して秘密鍵を作成した場合は、サーバー証明書および秘密鍵をインポートします。
dsctl <instance_name> tls import-server-key-cert /root/server.crt /root/server.key
# dsctl <instance_name> tls import-server-key-cert /root/server.crt /root/server.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドでは、最初にサーバー証明書へのパスを指定してから、秘密鍵へのパスを指定する必要があります。このメソッドは、証明書のニックネームを常に
Server-Cert
に設定します。
CA 証明書を NSS データベースにインポートします。
dsconf <instance_name> security ca-certificate add --file /root/ca.crt --name "Example CA"
# dsconf <instance_name> security ca-certificate add --file /root/ca.crt --name "Example CA"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow CA 証明書の信頼フラグを設定します。
dsconf <instance_name> security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
# dsconf <instance_name> security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、Directory Server が、TLS による暗号化および証明書ベースの認証に対して CA を信頼するように設定します。
インスタンスを停止します。
dsctl <instance_name> stop
# dsctl <instance_name> stop
Copy to Clipboard Copied! Toggle word wrap Toggle overflow /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 は起動に失敗します。-
LDIF ファイルをインポートします。
dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
# dsctl <instance_name> ldif2db --encrypted userRoot /var/lib/dirsrv/slapd-instance_name/ldif/None-userroot-2022_01_24_10_28_27.ldif
Copy to Clipboard Copied! Toggle word wrap Toggle overflow --encrypted
パラメーターを使用すると、スクリプトで属性を暗号化して、インポート中に暗号化を設定できます。インスタンスを起動します。
dsctl <instance_name> start
# dsctl <instance_name> start
Copy to Clipboard Copied! Toggle word wrap Toggle overflow