第 1 章 保护红帽目录服务器


使用红帽目录服务器提高 LDAP 服务的安全性。例如,您可以加密客户端和目录服务器之间的连接,并将加密属性存储在目录服务器数据库中。您还可以加密复制更改日志、配置身份验证和执行其他安全任务。

1.1. 启用 TLS 加密连接到目录服务器

默认情况下,红帽目录服务器在没有加密的情况下提供 LDAP 服务。要提高安全性,您可以在 Directory 服务器中配置 TLS,以启用复制环境中的客户端或其他主机使用加密连接。然后,他们可以对端口 389 或 LDAPS 协议在端口 636 上使用 STARTTLS 命令进行安全连接。

您可以使用绑定 Distinguished Name (DN)和密码,或使用基于证书的身份验证来使用 TLS。

目录服务器的加密服务由 Mozilla 网络安全服务(NSS)提供,这是 TLS 和基本加密功能的库。NSS 包括基于软件的加密令牌,该令牌是联邦信息处理标准(FIPS) 140-2 认证。

1.1.1. 加密连接到目录服务器的不同选项

要使用加密连接连接到目录服务器,您可以使用以下协议和框架:

LDAPS
当您使用 LDAPS 协议时,连接开始使用加密,成功或失败。但是,网络不会发送未加密的数据。因此,首选 LDAPS 而不是通过未加密的 LDAP 使用 STARTTLS
STARTTLS over LDAP

客户端通过 LDAP 协议建立未加密的连接,然后发送 STARTTLS 命令。如果命令成功,则所有进一步的通信都会被加密。

警告

如果 STARTTLS 命令失败,且客户端没有取消连接,则所有其他数据(包括身份验证信息)都会通过网络进行未加密的发送。

SASL
Simple Authentication and Security Layer (SASL)框架允许您使用外部验证方法(如 Kerberos)验证用户。

1.1.2. 目录服务器如何解锁 NSS 数据库

目录服务器将证书签名请求(CSR)、私钥和证书存储在网络安全服务(NSS)数据库中。当您安装新实例时,安装程序会自动创建 NSS 数据库并使用随机密码对其进行保护。安装程序将此密码存储在以下文件中:

  • /etc/dirsrv/slapd-<instance_name> /pwdfile.txt: dsconf tls 命令使用这个文件来访问 NSS 数据库。
  • /etc/dirsrv/slapd- <instance_name> /pin.txt :此文件包含令牌和密码,以便在目录服务器启动时自动解锁 NSS 数据库。

    • 如果您希望目录服务器在每次启动实例时提示输入 NSS 数据库密码,请删除此文件。
    • 如果您希望实例在没有提示输入密码的情况下自动启动,请保留此文件并在更改 NSS 数据库密码时更新该文件。

如果 /etc/dirsrv/slapd- &lt;instance_name> /pin.txt 文件不存在,您启动启用了加密的目录服务器并在 NSS 数据库中设置密码,其行为如下:

  • 如果 systemctldsctl 工具启动 ns-slapd Directory Server 进程,systemd 服务会提示输入密码,并自动将输入传递给 systemd-tty-ask-password-agent 工具:

    # dsctl <instance_name> start
    Enter PIN for Internal (Software) Token: (press TAB for no echo)
    Copy to Clipboard Toggle word wrap
  • 在个别情况下,当 ns-slapd Directory Server 进程没有由 systemctldsctl 工具启动,且进程从终端分离时,ns-slapd 使用 wall 命令向所有终端发送消息:

    Broadcast message from root@server (Fri 2021-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!
    Copy to Clipboard Toggle word wrap

    输入密码:

    # systemd-tty-ask-password-agent
    Enter PIN for Internal (Software) Token:
    Copy to Clipboard Toggle word wrap

要使用 TLS 加密或基于证书的身份验证,您必须管理网络安全服务(NSS)数据库中的证书。当您创建实例时,ds create 工具会在 /etc/dirsrv/slapd- <instance_name>/ 目录中自动创建此数据库,并使用强密码对其进行保护。

流程

  1. 创建私钥和证书签名请求(CSR)。如果要使用外部实用程序创建它们,请跳过这一步。

    • 如果您的主机只能通过一个名称访问,请输入:

      # dsctl <instance_name> tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization"
      Copy to Clipboard Toggle word wrap
    • 如果您的主机可以通过多个名称访问:

      # 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 Toggle word wrap

      如果您将主机名指定为最后一个参数,命令将使用 DNS:server.example. com、DNS:server.example.net 条目将 Subject Alternative Name (SAN)扩展添加到 CSR。

    -s subject 参数中指定的字符串必须是根据 RFC 1485 的有效主题名称。主题中的 CN 字段是必需的,您必须将其设置为服务器的完全限定域名(FQDN)。命令会将 CSR 存储在 /etc/dirsrv/slapd- <instance_name>/Server-Cert.csr 文件中。

  2. 将 CSR 提交到证书颁发机构(CA)以获取签发的证书。详情请查看您的 CA 文档。
  3. 将 CA 发布的服务器证书导入到 NSS 数据库:

    • 如果您使用 dsctl tls generate-server-cert-csr 命令创建私钥,请输入:

      # dsconf <instance_name> security certificate add --file /root/instance_name.crt --name "server-cert" --primary-cert
      Copy to Clipboard Toggle word wrap

      记住您在 -name _certificate_nickname 参数中设置的证书的名称。在后续步骤中,您需要它。

    • 如果您使用外部实用程序创建私钥,请导入服务器证书和私钥:

      # dsctl <instance_name> tls import-server-key-cert /root/server.crt /root/server.key
      Copy to Clipboard Toggle word wrap

      请注意,命令要求您首先指定服务器证书的路径,然后指定私钥的路径。这个方法始终将证书的 nickname 设置为 Server-Cert

  4. 将 CA 证书导入到 NSS 数据库:

    # dsconf <instance_name> security ca-certificate add --file /root/ca.crt --name "Example CA"
    Copy to Clipboard Toggle word wrap
  5. 设置 CA 证书的信任标记:

    # dsconf <instance_name> security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
    Copy to Clipboard Toggle word wrap

    这会将目录服务器配置为信任用于 TLS 加密和基于证书的身份验证的 CA。

  6. 启用 TLS 并设置 LDAPS 端口:

    # dsconf <instance_name> config replace nsslapd-securePort=636 nsslapd-security=on
    Copy to Clipboard Toggle word wrap
  7. firewalld 服务中打开 LDAPS 端口:

    # firewall-cmd --permanent --add-port=636/tcp
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  8. 启用 RSA 密码系列,设置 NSS 数据库安全设备和服务器证书名称:

    # dsconf <instance_name> security rsa set --tls-allow-rsa-certificates on --nss-token "internal (software)" --nss-cert-name Server-Cert
    Copy to Clipboard Toggle word wrap

    默认情况下,NSS 数据库中的安全设备名称是 内部的(软件)。

  9. 可选:禁用纯文本 LDAP 端口:

    # dsconf <instance_name> security disable_plain_port
    Copy to Clipboard Toggle word wrap
  10. 重启实例

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

验证

  • 使用 LDAPS 协议建立与目录服务器的连接。例如,运行查询:

    # ldapsearch -H ldaps://server.example.com:636 -D "cn=Directory Manager" -W -b "dc=example,dc=com" -x -s base
    Copy to Clipboard Toggle word wrap

    如果命令失败,并显示 ldap_sasl_bind (SIMPLE):无法联系 LDAP 服务器(-1) 错误,请使用 debug 级别 1 重新运行该命令:

    # ldapsearch -H ldaps://server.example.com:636 -D "cn=Directory Manager" -W -b "dc=example,dc=com" -x -s base -d 1
    Copy to Clipboard Toggle word wrap

您可以使用 Web 控制台配置 TLS 加密。

前提条件

  • 在 web 控制台中登录到实例。

流程

  1. 导航到 Server Security Certificate Management Certificate Signing Request,然后单击 Create Certificate Signing Request
  2. 为证书签名请求(CSR)、通用名称(CN)和机构(O)设置名称:

    如果您的主机可由多个名称访问,请在 Subject Alternative Names filed 中设置替代名称。

  3. 单击 Create Certificate Signing Request
  4. 查看 CSR 文本并复制它:

    1. 单击您要查看的 CSR 的 Node options 图标,然后选择 View CSR
    2. 复制 CSR 内容。
  5. 将 CSR 文件提交到证书颁发机构(CA)以获取签发的证书。详情请查看您的 CA 文档。
  6. 从 CA 获取证书时,导航到 Server Security Certificate Management TLS Certificates,然后单击 Add Server Certificate
  7. 为服务器证书设置唯一别名,上传发布的证书,然后点 Add Certificate

    请记住证书 nickname,因为稍后的步骤需要它。

  8. 导航到 服务器 安全证书 管理 受信任的证书颁发机构然后单击添加 CA 证书
  9. 为 CA 证书设置唯一别名,上传 CA 证书文件,然后单击 添加证书
  10. 可选:如果您在 Directory Server 实例安装过程中没有启用 TLS 加密,请启用它:

    1. 导航到 Server Security Settings,并启用安全开关。
    2. 在弹出窗口上,单击 Enable Security
    3. Security Setting 页面中点 Save Configuration
  11. 安全配置页面中的配置服务器证书名称

    1. 进入到 Server Security Security Configuration
    2. Server Certificate Name 下拉列表中选择服务器证书 nickname,然后单击 Save Configuration
    3. 可选: 如果您在下拉列表中没有看到证书 nickname,请刷新 Security Settings 页面并再次执行上一步。
  12. 可选:如果要使用 636 以外的 LDAPS 端口,请导航到 Server Server Settings,设置 LDAPS 端口,然后点 Save
  13. firewalld 服务中打开 LDAPS 端口:

    # firewall-cmd --permanent --add-port=636/tcp
    # firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  14. 可选:进入到 Server Security Security Configuration,选择 Require Secure Connections,点 Save Configuration

    目录服务器禁用纯文本 LDAP 端口。

  15. 点右上角的 Actions,然后选择 Restart Instance

默认情况下,如果启用了加密,且证书已过期,Directory 服务器会记录警告并启动服务。要更改此行为,请设置 nsslapd-validate-cert 参数。您可以将其设置为以下值:

  • Warn: Directory Server 启动并将有关过期证书的警告记录到 /var/log/dirsrv/slapd- <instance_name&gt; /error 日志文件。这是默认设置。
  • 在 : Directory 服务器上 验证证书。如果证书已过期,实例无法启动。
  • off :目录服务器不会验证证书过期日期。实例启动,且不会记录任何警告。

前提条件

  • 已配置了 TLS 加密。

流程

  • 使用以下命令更改 nsslapd-validate-cert 参数:

    # dsconf <instance_name> config replace nsslapd-validate-cert=<value>
    Copy to Clipboard Toggle word wrap

1.1.6. 更改 NSS 数据库的密码

您可以更改网络安全服务(NSS)数据库的密码。例如,当未授权人知道密码时,请更改密码。

前提条件

  • 您知道当前的 NSS 数据库密码。

    如果您使用密码文件在 Directory Server 启动时自动解锁数据库,密码会以明文形式保存在 /etc/dirsrv/slapd- <instance_name> /pin.txt 文件中。

流程

  1. 使用以下命令更改 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.
    Copy to Clipboard Toggle word wrap
  2. 如果您使用密码文件在没有提示输入 NSS 数据库密码的情况下自动启动目录服务器,请在 /etc/dirsrv/slapd-<instance_name>/pin.txt 中使用新密码替换旧密码:

    • 如果您使用 NSS 软件加密模块,这是默认设置:

      Internal (Software) Token:password
      Copy to Clipboard Toggle word wrap
    • 如果您使用硬件安全模块(HSM):

      name_of_the_token:password
      Copy to Clipboard Toggle word wrap

验证

  • 对需要输入密码的 NSS 数据库执行操作。例如,列出您的实例的私钥:

    # 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      72cb03f87381abfbb6b9e78234e2e4502ad1bfc0   NSS Certificate DB:Server-Cert
    Copy to Clipboard Toggle word wrap

    如果在输入新密码后命令显示预期的输出,则更改密码成功。

当您创建新实例时,安装程序会自动创建 /etc/dirsrv/slapd-instance_name/pin.txt 文件,以便目录服务器在不提示输入网络安全服务(NSS)密码的情况下启动。但是,如果您删除此文件,您可以重新创建该文件。

警告

密码以纯文本形式存储。如果服务器在不安全的环境中运行,则不要使用密码文件。

前提条件

  • 您知道 NSS 数据库密码。

流程

  1. 使用以下内容创建 /etc/dirsrv/slapd-<instance_name>/pin.txt 文件:

    • 如果您使用 NSS 软件加密模块,这是默认设置:

      Internal (Software) Token:password
      Copy to Clipboard Toggle word wrap
    • 如果您使用硬件安全模块(HSM):

      name_of_the_token:password
      Copy to Clipboard Toggle word wrap
  2. 设置文件权限:

    # chown dirsrv:root /etc/dirsrv/slapd-<instance_name>/pin.txt
    # chmod 400 /etc/dirsrv/slapd-<instance_name>/pin.txt
    Copy to Clipboard Toggle word wrap

验证

  • 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

    如果系统没有提示输入 NSS 数据库密码,目录服务器将使用密码文件。

当您在目录服务器中启用 TLS 加密时,您可以将实例配置为使用 CA 发布的证书。如果客户端现在使用 LDAPS 协议或 STARTTLS 命令建立到服务器的连接,目录服务器使用此证书加密连接。客户端实用程序使用 CA 证书来验证服务器证书是否有效。默认情况下,如果它们不信任服务器证书,则这些工具会取消连接。

例 1.1. 如果客户端工具没有使用 CA 证书,则可能会出现连接错误

  • 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)'}
    Copy to Clipboard Toggle word wrap
  • 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)
    Copy to Clipboard Toggle word wrap

要在 Red Hat Enterprise Linux 中启用客户端工具来验证证书目录服务器使用,请将 CA 证书添加到操作系统的信任存储中。

前提条件

  • 您知道网络安全服务(NSS)数据库的密码。

    如果您仍然使用在 Directory Server 实例安装过程中生成的密码,您可以在 /etc/dirsrv/slapd-<instance_name>/pwdfile.txt 文件以纯文本形式找到这个密码。

流程

  1. 如果您没有 Directory 服务器使用的 CA 证书的本地副本:

    1. 列出服务器网络安全服务(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
      Copy to Clipboard Toggle word wrap
    2. 使用 NSS 数据库中 CA 证书的别名导出 CA 证书:

      # certutil -d /etc/dirsrv/slapd-<instance_name>/ -L -n "Example CA" -a > /tmp/ds-ca.crt
      Copy to Clipboard Toggle word wrap
  2. 将 CA 证书复制到 /etc/pki/ca-trust/source/anchors/ 目录中:

    # cp /tmp/ds-ca.crt /etc/pki/ca-trust/source/anchors/
    Copy to Clipboard Toggle word wrap
  3. 重建 CA 信任数据库:

    # update-ca-trust
    Copy to Clipboard Toggle word wrap

验证

  • 使用 LDAPS 协议建立与目录服务器的连接。例如,运行查询:

    # ldapsearch -H ldaps://server.example.com:636 -D "cn=Directory Manager" -W -b "dc=example,dc=com" -x -s base
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat