1.7. 配置基于证书的身份验证
目录服务器支持 LDAP 客户端和服务器到服务器连接的基于证书的身份验证,比如在复制拓扑中。
根据配置,客户端可以使用证书进行身份验证。根据证书的 subject 字段中的属性验证证书后,服务器会在 目录中搜索用户。如果搜索只返回一个用户条目,Directory 服务器会将此用户用于所有进一步的操作。另外,您可以配置用于身份验证的证书必须与用户条目的 userCertificate
属性中存储的 Distinguished Encoding Rules (DER)格式证书匹配。
使用基于证书的身份验证的好处:
- 提高效率:使用证书数据库密码进行身份验证,然后将该证书用于所有后续绑定或身份验证操作比重复提供绑定名称(DN)和密码更高效。
- 提高安全性:使用基于证书的身份验证比非证书绑定操作更安全,因为基于证书的身份验证使用公钥加密。攻击者无法截获在网络间绑定凭证。如果证书或设备丢失,在没有 PIN 的情况下使用它,因此不对第三方的干扰(如网络攻击)不小心。
1.7.1. 设置基于证书的身份验证 复制链接链接已复制到粘贴板!
前提条件
- 您在目录服务器中启用了 TLS 加密。
-
您可以在网络安全服务(NSS)数据库中为证书颁发机构(CA)证书设置
CT
标志。
流程
创建一个
/etc/dirsrv/slapd- <instance_name> /certmap.conf
文件,将证书中的信息映射到 Directory Server 用户:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用这个配置,对于
cn=Example CA
发布的证书,目录服务器不会从证书的主题生成基本 DN,因为DNComps
参数为此签发者设置为空。另外,FilterComps
和VerifyCert
的设置继承自默认条目。带有与
cn=Example CA
不同的签发者 DN 的证书将使用默认条目的设置,并根据证书主题中的 cn 属性生成基本 DN。这可让目录服务器在特定 DN 下启动搜索,而无需搜索整个目录。对于所有证书,目录服务器使用来自证书主体的
mail
和cn
属性生成搜索过滤器。但是,如果主题中不存在mail
属性,Directory 服务器将自动使用主题中的证书 e 属性的值。启用基于证书的身份验证。例如,要将基于证书的验证配置为可选,请输入:
dsconf <instance_name> security set --tls-client-auth="allowed"
# dsconf <instance_name> security set --tls-client-auth="allowed"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--tls-client-auth=required
选项,将基于证书的验证配置为强制。可选: 如果您根据需要配置基于证书的身份验证,请启用
nsslapd-require-secure-binds
参数:dsconf <instance_name> config replace nsslapd-require-secure-binds=on
# dsconf <instance_name> config replace nsslapd-require-secure-binds=on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此设置可确保用户无法使用未加密的连接绕过基于证书的验证。
可选:如果目录服务器应使用证书的身份而不是绑定请求中的凭证,请将目录服务器配置为使用
EXTERNAL
简单身份验证和安全层(SASL)机制:dsconf <instance_name> config replace nsslapd-force-sasl-external=on
# dsconf <instance_name> config replace nsslapd-force-sasl-external=on
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有了这个设置,目录服务器会忽略证书中身份的任何其他绑定方法。
重启实例:
dsctl <instance_name> restart
# dsctl <instance_name> restart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤:
如果您配置了 Directory Server,以便身份验证证书必须与用户
userCertificate
属性中存储的证书匹配,请将证书添加到用户条目中。详情请查看 第 1.7.2 节 “为用户添加证书”
1.7.2. 为用户添加证书 复制链接链接已复制到粘贴板!
设置基于证书的身份验证时,您可以配置服务器,以便用于身份验证的证书必须与用户 userCertificate
二进制文件属性中存储的证书匹配。如果启用此功能,您必须将受影响用户的证书添加到其目录条目中。
前提条件
- 您在目录服务器中启用了基于证书的身份验证。
- 您有一个由服务器信任的证书颁发机构(CA)发布的客户端证书。
- 客户端证书采用区分编码规则(DER)格式。
-
客户端证书满足服务器上
/etc/dirsrv/slapd-<instance_name>/certmap.conf
中设置的要求。
流程
如果证书不是 DER 格式,请转换它。例如,要将证书从隐私增强邮件(PEM)转换为 DER,请输入:
openssl x509 -in /home/user_name/certificate.pem -out /home/user_name/certificate.der -outform DER
# openssl x509 -in /home/user_name/certificate.pem -out /home/user_name/certificate.der -outform DER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书添加到用户的
userCertificate
属性中:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用基于证书的身份验证以用户身份进行身份验证:
将以下环境变量设置为 CA 证书、用户密钥和用户证书的对应路径:
LDAPTLS_CACERT=/home/user_name/CA.crt LDAPTLS_KEY=/home/user_name/user.key LDAPTLS_CERT=/home/user_name/user.der
LDAPTLS_CACERT=/home/user_name/CA.crt LDAPTLS_KEY=/home/user_name/user.key LDAPTLS_CERT=/home/user_name/user.der
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者,在当前用户的
~/.ldaprc
文件中设置TLS_CACERT
、TLS_KEY
和TLS_CERT
参数。连接到服务器:
ldapwhoami -H ldaps://server.example.com -Y EXTERNAL
# ldapwhoami -H ldaps://server.example.com -Y EXTERNAL dn: uid=example,ou=people,dc=example,dc=com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow