21.5. 更新用于属性加密的 TLS 证书
属性加密基于服务器的 TLS 证书。按照以下步骤,在续订或替换 TLS 证书后防止属性加密失败。
前提条件
- 您已经配置的属性加密。
- TLS 证书将在不久的将来过期。
流程
导出
userRoot
数据库:dsconf -D "cn=Directory Manager" ldap://server.example.com backend export -E userRoot
# dsconf -D "cn=Directory Manager" ldap://server.example.com backend export -E userRoot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 服务器将导出存储在
/var/lib/dirsrv/slapd-instance_name/ldif/
目录中。e选项
解密导出过程中已加密的属性。创建私钥和证书签名请求(CSR)。如果要使用外部实用程序创建它们,请跳过这一步。
如果您的主机只可通过一个名称访问,请输入:
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 添加 Subject Alternative Name (SAN)扩展,DNS:server.example.net
条目到 CSR。
根据 RFC 1485,在
-s subject
参数中指定的字符串必须是有效的主题名称。subject 中的CN
字段是必需的,且您必须将它设置为服务器的完全限定域名(FQDN)。命令将 CSR 存储在/etc/dirsrv/slapd-instance_name/Server-Cert.csr
文件中。- 将 CSR 提交到证书颁发机构(CA)以获取签发的证书。详情请查看您的 CA 文档。
将 CA 发布的服务器证书导入到 NSS 数据库:
如果使用
dsctl tls generate-server-cert-csr
命令创建私钥,请输入: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-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 请注意,命令要求您首先指定服务器证书的路径,然后再指定私钥的路径。这个方法始终将证书的 nickname 设置为
Server-Cert
。
将 CA 证书导入到 NSS 数据库:
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 设置 CA 证书的信任标记:
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 这会将 Directory 服务器配置为信任 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 属性 keys,cn=database_name,cn=ldbm database,cn=plugins,cn=config
-
cn=3DES,cn=encrypted 属性 key,cn=database_name,cn=ldbm database,cn=plugins,cn=config
重要删除所有数据库的条目。如果包含
nsSymmetricKey
属性的任何条目都保留在 '/etc/dirsrv/slapd-instance_name/dse.ldif 文件中,Directory 服务器将无法启动。-
导入 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