1.3. 使用命令行启用与目录服务器的 TLS 加密连接
要使用 TLS 加密或基于证书的身份验证,您必须在网络安全服务(NSS)数据库中管理证书。当您创建实例时,dscreate
工具会在 /etc/dirsrv/slapd-instance_name/
目录中自动创建此数据库,并使用强密码对其进行保护。
流程
创建私钥和证书签名请求(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" server.example.com server.example.net
如果将主机名指定为最后一个参数,该命令会通过
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
请记住在
--name _certificate_nickname
参数中设置的证书名称。后续步骤中需要用到它。如果您使用外部实用程序创建了私钥,请导入服务器证书和私钥:
#
dsctl instance_name tls import-server-key-cert /root/server.crt /root/server.key
请注意,命令要求您首先指定服务器证书的路径,然后再指定私钥的路径。这个方法始终将证书的 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"
设置 CA 证书的信任标记:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com security ca-certificate set-trust-flags "Example CA" --flags "CT,,"
这会将 Directory 服务器配置为信任 TLS 加密和基于证书的身份验证的 CA。
启用 TLS 并设置 LDAPS 端口:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-securePort=636 nsslapd-security=on
在
firewalld
服务中打开 LDAPS 端口:#
firewall-cmd --permanent --add-port=636/tcp
#firewall-cmd --reload
启用 RSA 密码系列、设置 NSS 数据库安全设备以及服务器证书名称:
#
dsconf -D "cn=Directory Manager" ldap://server.example.com security rsa set --tls-allow-rsa-certificates on --nss-token "internal (software)" --nss-cert-name Server-Cert
默认情况下,NSS 数据库中安全设备的名称
为内部(软件)
可选:禁用纯文本 LDAP 端口:
#
dsconf inst security disable_plain_port
重启实例
#
dsctl instance_name restart
验证
使用 LDAPS 协议建立与目录服务器的连接。例如,运行查询:
#
ldapsearch -H ldaps://server.example.com:636 -D "cn=Directory Manager" -W -b "dc=example,dc=com" -x -s base
如果命令失败,使用
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
后续步骤
其他资源