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"
# 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 文件中,以及目录服务器的网络安全服务(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"
# dsctl instance_name tls generate-server-cert-csr -s "CN=server.example.com,O=example_organization,OU=IT,ST=North Carolina,C=US"
例 9.2. 为多主目录主机创建私钥和 CSR
如果目录服务器主机有多个名称,请使用 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
# 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
如果将主机名指定为最后一个参数,该命令会使用 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 发布的证书应被信任:
| Web 控制台选项 | dsconf 和 certutil 选项 | 描述 |
|---|---|---|
| (c) Trusted CA | C,, | 服务器验证证书用来建立与复制合作伙伴的加密连接,是否已由可信 CA 发布。 |
| (T) Trusted CA Client Auth | T,, | 服务器信任此 CA 证书,用于发布适合 TLS EXTERNAL 绑定的客户端证书。 |
您可以为 CA 设置这两个选项。使用
certutil 时,将 -T "CT," 参数传递给实用程序。
9.3.2.1. 使用命令行安装 CA 证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
安装 CA 证书:
- 导入 CA 证书。例如,要导入存储在
/root/ca.crt文件中的 CA 证书,并将其存储在带有Example CAnick 名称的数据库中:dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate add --file /root/ca.crt --name "Example CA"
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate add --file /root/ca.crt --name "Example CA"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 设置信任选项。例如,要设置 CT, 信任标记:
dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
# dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "Example CA" --flags "CT,,"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.2.2. 使用 Web 控制台安装 CA 证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台安装 CA 证书:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单,然后选择 Security 条目。
- 打开 证书管理 选项卡,然后选择 受信任的证书颁发机构 子选项卡。
- 点 。
- 输入 CA 证书文件的路径以及证书的别名。
图 9.1. 添加 CA 证书
注意CA 证书必须存储在本地目录服务器主机上,且必须由dirsrv用户读取。 - 单击 。
- 单击导入的 CA 证书旁边的 ,然后选择 Edit Trust Flags。
- 在 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
# dsctl instance_name tls import-server-key-cert /root/server.crt /root/server.key
请注意,dsctl tls import-server-key-cert 命令需要按照以下顺序的路径:
- 服务器证书的路径。
- 私钥文件的路径。
9.3.4. 安装服务器证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在证书颁发机构(CA)发布请求的证书后,您必须在网络安全服务(NSS)数据库中安装它。
如果您创建了不在 NSS 数据库中的私钥和证书签名请求,请按照 中所述的步骤操作 第 9.3.3 节 “导入私钥和服务器证书”
9.3.4.1. 使用命令行安装服务器证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要在目录服务器的 NSS 数据库中安装服务器证书,请使用
certutil 工具。例如:
- 安装 CA 证书。请参阅 第 9.3.2 节 “安装 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
# dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate add --file /root/instance_name.crt --name "Server-Cert" --primary-certCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.4.2. 使用 Web 控制台安装服务器证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台安装服务器证书:
- 安装 CA 证书。请参阅 第 9.3.2 节 “安装 CA 证书”。
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单,然后选择 Security 条目。
- 打开 证书管理 选项卡,然后选择 TLS Certificates 子选项卡。
- 单击 。
- 为证书输入服务器证书文件的路径和 nickname。
图 9.3. 添加服务器证书
注意服务器证书必须存储在本地 Directory 服务器主机上,且必须被dirsrv用户读取。 - 。
9.3.5. 生成并安装自签名证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
当您使用
dscreate 工具创建启用了 TLS 的实例时,dscreate 会自动创建和安装自签名证书。但是,如果您在实例创建过程中没有启用 TLS,您可以手动创建并安装自签名证书。
注意
您只能使用命令行执行此操作。
要创建并安装自签名证书:
- 使用随机数据生成 noise 文件。例如,生成大小为 4096 位的文件:
openssl rand -out /tmp/noise.bin 4096
# openssl rand -out /tmp/noise.bin 4096Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建自签名证书并将其添加到 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# 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,dataEnciphermentCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 会自动将$HOSTNAME变量替换为完全限定域名(FQDN),$RANDOM替换为随机生成的数字。有关上一命令中使用的参数的详情,请查看 certutil(1) man page。 - (可选)验证生成的证书是否是自签名的:
certutil -L -d /etc/dirsrv/slapd-instance_name/ -n "Server-Cert" | egrep "Issuer|Subject"
# 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 Copied! Toggle word wrap Toggle overflow 此命令的输出必须显示 Directory Server 主机的 FQDN,用于证书的签发者和主题。
9.3.6. 续订证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如果证书将在不久的将来过期,您必须及时更新它才能继续建立安全连接。
9.3.6.1. 使用命令行续订证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
续订服务器证书:
- 如果不使用属性加密:
- 使用相同的选项创建一个新的证书签名请求(CSR),如密钥大小、主机名和主题。有关创建 CSR 的详情,请查看 第 9.3.1.1 节 “使用命令行创建证书签名请求”
- 从 CA 收到发布的证书后,使用相同的 nickname 在数据库中安装它。请参阅 第 9.3.2.1 节 “使用命令行安装 CA 证书”。
- 停止实例:
dsctl instance_name stop
# dsctl instance_name stopCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑
/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文件中,则目录服务器将无法启动。 - 启动实例:
dsctl instance_name start
# dsctl instance_name startCopy to Clipboard Copied! Toggle word wrap Toggle overflow
目录服务器将自动使用更新发布的证书。 - 如果使用属性加密,请参阅 第 10.5 节 “更新用于属性加密的 TLS 证书”。
9.3.7. 删除证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
例如,如果不再需要证书,例如因为已经公开证书,将其从数据库中删除。
9.3.7.1. 使用命令行删除证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用命令行删除证书:
- 另外,还可显示数据库中的证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 删除证书。例如,要删除使用 Server-Cert 别名的证书:
dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate del Server-Cert
# dsconf -D "cn=Directory Manager" ldap://server.example.com security certificate del Server-CertCopy to Clipboard Copied! Toggle word wrap Toggle overflow
9.3.7.2. 使用 Web 控制台删除证书 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台删除证书:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单,然后选择 Security 条目。
- 打开 证书管理 选项卡,然后选择 TLS Certificates 子选项卡。
- 单击证书旁边的 ,然后选择 Delete Certificate。
- 单击 。
9.3.8. 删除私钥 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
例如,如果不再需要私钥,因为您创建了更强大的密钥,将其从数据库中删除。
警告
如果您删除了私钥,基于这个密钥的证书将无法正常工作。
9.3.8.1. 使用命令行删除私钥 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
删除私钥:
- 根据您要删除的密钥删除所有证书。请参阅 第 9.3.7 节 “删除证书”。
- 另外,还可显示数据库中的密钥:
certutil -d /etc/dirsrv/slapd-instance_name/ -K
# 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-certCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 删除私钥。例如,要删除使用 example-cert 别名的私钥:
certutil -d /etc/dirsrv/slapd-instance_name/ -F -n "example-cert"
# certutil -d /etc/dirsrv/slapd-instance_name/ -F -n "example-cert"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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,,"
# 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 Trust Options”。
9.3.9.2. 使用 Web 控制台更改 CA Trust Options 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 Web 控制台更改 CA 的信任选项:
- 在 web 控制台中打开 Directory Server 用户界面。请参阅 第 1.4 节 “使用 Web 控制台登录目录服务器”。
- 选择实例。
- 打开 菜单,然后选择 Security 条目。
- 打开 证书管理 选项卡。
- 在 Trusted Certificate Authorities 子选项卡中,单击导入的 CA 证书旁边的 ,然后选择 Edit Trust Flags。
- 选择 trust 标记。例如:
图 9.4. 设置 CA 证书的信任标记
- 点击 。
9.3.10. 更改 NSS 数据库的密码 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
在某些情况下,管理员希望更改网络安全服务(NSS)数据库的密码。本节描述了此过程。
重要
如果您使用密码文件使目录服务器自动打开网络安全服务(NSS)数据库,您必须在设置新密码后更新该文件。请参阅 第 9.4.1.5 节 “为目录服务器创建密码文件”。
9.3.10.1. 使用命令行更改 NSS 数据库的密码 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
要更改 NSS 数据库的密码: