9.3. 管理目录服务器使用的 NSS 数据库


要使用 TLS 加密或基于证书的身份验证,您必须在网络安全服务(NSS)数据库中管理证书。当您创建实例时,dscreate 实用程序会在 /etc/dirsrv/slapd-instance_name/ 目录中自动创建此数据库,并使用强大的密码保护。实用程序将密码存储在 /etc/dirsrv/slapd-instance_name/pwdfile.txt 文件中。请注意,Directory 服务器不使用此文件。dscreate 实用程序仅创建此文件来为管理员提供密码。有关更改密码的详情,请参考 第 9.3.10 节 “更改 NSS 数据库的密码”
这部分论述了管理目录服务器的 NSS 数据库的最频繁操作。

9.3.1. 创建证书签名请求

证书签名请求(CSR)是对证书颁发机构(CA)为服务器密钥签名的请求。这部分论述了如何创建包含私钥的 CSR。
注意
目录服务器只支持使用 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"
Copy to Clipboard Toggle word wrap
dsctl tls generate-server-cert-csr 命令将 CSR 存储在 /etc/dirsrv/slapd-instance_name/Server-Cert.csr 文件中,以及目录服务器的网络安全服务(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"
Copy to Clipboard Toggle word wrap
-s 参数中指定的字符串必须是根据 RFC 1485 的有效主题名称。CN 字段是必需的,您必须将其设置为服务器的完全限定域名(FQDN)。其他字段都是可选的。

例 9.2. 为多主目录主机创建私钥和 CSR

如果目录服务器主机有多个名称,请使用 CSR 的 SAN 扩展中的所有主机名创建一个 CSR。以下命令为 server.example.comserver.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
Copy to Clipboard Toggle word wrap
如果将主机名指定为最后一个参数,该命令会使用 DNS:server.example.com 添加 SAN 扩展,DNS:server.example.net 条目添加到 CSR。-s 参数中指定的字符串必须是根据 RFC 1485 的有效主题名称。CN 字段是必需的,您必须将其设置为服务器的 FQDN 之一。其他字段都是可选的。
生成 CSR 后,将其提交到 CA 以获取签发的证书。详情请查看您的 CA 文档。

9.3.2. 安装 CA 证书

要让目录服务器信任证书颁发机构(CA),您必须将 CA 的证书安装到网络安全服务(NSS)数据库中。在此过程中,您必须设置 CA 发布的证书应被信任:
Expand
表 9.1. CA Trust Options
Web 控制台选项 dsconfcertutil 选项 描述
(c) Trusted CA C,, 服务器验证证书用来建立与复制合作伙伴的加密连接,是否已由可信 CA 发布。
(T) Trusted CA Client Auth T,, 服务器信任此 CA 证书,用于发布适合 TLS EXTERNAL 绑定的客户端证书。
您可以为 CA 设置这两个选项。使用 certutil 时,将 -T "CT," 参数传递给实用程序。

9.3.2.1. 使用命令行安装 CA 证书

安装 CA 证书:
  1. 导入 CA 证书。例如,要导入存储在 /root/ca.crt 文件中的 CA 证书,并将其存储在带有 Example CA nick 名称的数据库中:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate add --file /root/ca.crt --name "Example CA"
    Copy to Clipboard Toggle word wrap
  2. 设置信任选项。例如,要设置 CT, 信任标记:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
    Copy to Clipboard Toggle word wrap

9.3.2.2. 使用 Web 控制台安装 CA 证书

使用 Web 控制台安装 CA 证书:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后选择 Security 条目。
  4. 打开 证书管理 选项卡,然后选择 受信任的证书颁发机构 子选项卡。
  5. Add CA Certificate
  6. 输入 CA 证书文件的路径以及证书的别名。

    图 9.1. 添加 CA 证书

    注意
    CA 证书必须存储在本地目录服务器主机上,且必须由 dirsrv 用户读取。
  7. 单击 Add Certificate
  8. 单击导入的 CA 证书旁边的 Actions,然后选择 Edit Trust Flags
  9. SSL 列中选择 (C) - Trusted CA(T) - Trusted CA Client Auth

    图 9.2. 添加 CA 证书的信任标记

9.3.3. 导入私钥和服务器证书

这部分论述了如何使用外部工具在 NSS 数据库中导入私钥和证书签名请求(CSR)。
如果您在 NSS 数据库中创建了私钥和 CSR,请按照 第 9.3.4 节 “安装服务器证书” 中所述的步骤操作。
要从 /root/server.crt/root/server.key 文件中的私钥导入证书,请输入:
# dsctl instance_name tls import-server-key-cert /root/server.crt /root/server.key
Copy to Clipboard Toggle word wrap
请注意,dsctl tls import-server-key-cert 命令需要按照以下顺序的路径:
  1. 服务器证书的路径。
  2. 私钥文件的路径。

9.3.4. 安装服务器证书

在证书颁发机构(CA)发布请求的证书后,您必须在网络安全服务(NSS)数据库中安装它。
如果您创建了不在 NSS 数据库中的私钥和证书签名请求,请按照 中所述的步骤操作 第 9.3.3 节 “导入私钥和服务器证书”

9.3.4.1. 使用命令行安装服务器证书

要在目录服务器的 NSS 数据库中安装服务器证书,请使用 certutil 工具。例如:
  1. 安装 CA 证书。请参阅 第 9.3.2 节 “安装 CA 证书”
  2. 导入服务器证书。例如,要导入存储在 /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
    Copy to Clipboard Toggle word wrap

9.3.4.2. 使用 Web 控制台安装服务器证书

使用 Web 控制台安装服务器证书:
  1. 安装 CA 证书。请参阅 第 9.3.2 节 “安装 CA 证书”
  2. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  3. 选择实例。
  4. 打开 Server Settings 菜单,然后选择 Security 条目。
  5. 打开 证书管理 选项卡,然后选择 TLS Certificates 子选项卡。
  6. 单击 Add Server Certificate
  7. 为证书输入服务器证书文件的路径和 nickname。

    图 9.3. 添加服务器证书

    注意
    服务器证书必须存储在本地 Directory 服务器主机上,且必须被 dirsrv 用户读取。
  8. 单击添加证书

9.3.5. 生成并安装自签名证书

当您使用 dscreate 工具创建启用了 TLS 的实例时,dscreate 会自动创建和安装自签名证书。但是,如果您在实例创建过程中没有启用 TLS,您可以手动创建并安装自签名证书。
注意
您只能使用命令行执行此操作。
要创建并安装自签名证书:
  1. 使用随机数据生成 noise 文件。例如,生成大小为 4096 位的文件:
    # openssl rand -out /tmp/noise.bin 4096
    Copy to Clipboard Toggle word wrap
  2. 创建自签名证书并将其添加到 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
    Copy to Clipboard Toggle word wrap
    Red Hat Enterprise Linux 会自动将 $HOSTNAME 变量替换为完全限定域名(FQDN),$RANDOM 替换为随机生成的数字。有关上一命令中使用的参数的详情,请查看 certutil(1) man page。
  3. (可选)验证生成的证书是否是自签名的:
    # certutil -L -d /etc/dirsrv/slapd-instance_name/ -n "Server-Cert" | egrep "Issuer|Subject"
            Issuer: "CN=server.example.com"
            Subject: "CN=server.example.com"
    Copy to Clipboard Toggle word wrap
    此命令的输出必须显示 Directory Server 主机的 FQDN,用于证书的签发者和主题。

9.3.6. 续订证书

如果证书将在不久的将来过期,您必须及时更新它才能继续建立安全连接。

9.3.6.1. 使用命令行续订证书

续订服务器证书:
  • 如果不使用属性加密:
    1. 使用相同的选项创建一个新的证书签名请求(CSR),如密钥大小、主机名和主题。有关创建 CSR 的详情,请查看 第 9.3.1.1 节 “使用命令行创建证书签名请求”
    2. 从 CA 收到发布的证书后,使用相同的 nickname 在数据库中安装它。请参阅 第 9.3.2.1 节 “使用命令行安装 CA 证书”
    3. 停止实例:
      # dsctl instance_name stop
      Copy to Clipboard Toggle word wrap
    4. 编辑 /etc/dirsrv/slapd-instance_name/dse.ldif 文件,并删除以下条目,包括其属性:
      • cn=AES,cn=encrypted 属性键,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 文件中,则目录服务器将无法启动。
    5. 启动实例:
      # dsctl instance_name start
      Copy to Clipboard Toggle word wrap
    目录服务器将自动使用更新发布的证书。
  • 如果使用属性加密,请参阅 第 10.5 节 “更新用于属性加密的 TLS 证书”

9.3.7. 删除证书

例如,如果不再需要证书,例如因为已经公开证书,将其从数据库中删除。

9.3.7.1. 使用命令行删除证书

使用命令行删除证书:
  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: ,,
    Copy to Clipboard Toggle word wrap
  2. 删除证书。例如,要删除使用 Server-Cert 别名的证书:
    # dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate del Server-Cert
    Copy to Clipboard Toggle word wrap

9.3.7.2. 使用 Web 控制台删除证书

使用 Web 控制台删除证书:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后选择 Security 条目。
  4. 打开 证书管理 选项卡,然后选择 TLS Certificates 子选项卡。
  5. 单击证书旁边的 Actions,然后选择 Delete Certificate
  6. 单击 Yes

9.3.8. 删除私钥

例如,如果不再需要私钥,因为您创建了更强大的密钥,将其从数据库中删除。
警告
如果您删除了私钥,基于这个密钥的证书将无法正常工作。

9.3.8.1. 使用命令行删除私钥

删除私钥:
  1. 根据您要删除的密钥删除所有证书。请参阅 第 9.3.7 节 “删除证书”
  2. 另外,还可显示数据库中的密钥:
    # 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
    Copy to Clipboard Toggle word wrap
  3. 删除私钥。例如,要删除使用 example-cert 别名的私钥:
    # certutil -d /etc/dirsrv/slapd-instance_name/ -F -n "example-cert"
    Copy to Clipboard Toggle word wrap

9.3.9. 更改 CA 信任选项

在某些情况下,您需要更新证书颁发机构(CA)的 trust 选项。本节描述了这个过程。

9.3.9.1. 使用命令行更改 CA Trust Options

要更改 CA 的信任选项,请将-- flags 参数中的新选项传递给 dsconf security ca-certificate set-trust-flags 命令。
例如,设置目录服务器只信任由名为 example-CA 的 CA 发布的客户端身份验证证书:
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "example-CA" --flags "T,,"
Copy to Clipboard Toggle word wrap
--flags trust_options 参数设置 CA 发布的证书应该被信任。请参阅 表 9.1 “CA Trust Options”

9.3.9.2. 使用 Web 控制台更改 CA Trust Options

使用 Web 控制台更改 CA 的信任选项:
  1. 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”
  2. 选择实例。
  3. 打开 Server Settings 菜单,然后选择 Security 条目。
  4. 打开 证书管理 选项卡。
  5. Trusted Certificate Authorities 子选项卡中,单击导入的 CA 证书旁边的 Actions,然后选择 Edit Trust Flags
  6. 选择 trust 标记。例如:

    图 9.4. 设置 CA 证书的信任标记

  7. 点击 Save

9.3.10. 更改 NSS 数据库的密码

在某些情况下,管理员希望更改网络安全服务(NSS)数据库的密码。本节描述了此过程。
重要
如果您使用密码文件使目录服务器自动打开网络安全服务(NSS)数据库,您必须在设置新密码后更新该文件。请参阅 第 9.4.1.5 节 “为目录服务器创建密码文件”

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.
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat