1.7. 配置基于证书的身份验证


目录服务器支持 LDAP 客户端和服务器到服务器连接的基于证书的身份验证,比如在复制拓扑中。

根据配置,客户端可以使用证书进行身份验证。根据证书的 subject 字段中的属性验证证书后,服务器会在 目录中搜索用户。如果搜索只返回一个用户条目,Directory 服务器会将此用户用于所有进一步的操作。另外,您可以配置用于身份验证的证书必须与用户条目的 userCertificate 属性中存储的 Distinguished Encoding Rules (DER)格式证书匹配。

使用基于证书的身份验证的好处:

  • 提高效率:使用证书数据库密码进行身份验证,然后将该证书用于所有后续绑定或身份验证操作比重复提供绑定名称(DN)和密码更高效。
  • 提高安全性:使用基于证书的身份验证比非证书绑定操作更安全,因为基于证书的身份验证使用公钥加密。攻击者无法截获在网络间绑定凭证。如果证书或设备丢失,在没有 PIN 的情况下使用它,因此不对第三方的干扰(如网络攻击)不小心。

1.7.1. 设置基于证书的身份验证

前提条件

  • 您在目录服务器中启用了 TLS 加密。
  • 您可以在网络安全服务(NSS)数据库中为证书颁发机构(CA)证书设置 CT 标志。

流程

  1. 创建一个 /etc/dirsrv/slapd- <instance_name> /certmap.conf 文件,将证书中的信息映射到 Directory Server 用户:

    certmap default         default
    default:DNComps         dc
    default:FilterComps     mail,cn
    default:VerifyCert      on
    
    certmap example         cn=Example CA
    example:DNComps
    Copy to Clipboard Toggle word wrap

    使用这个配置,对于 cn=Example CA 发布的证书,目录服务器不会从证书的主题生成基本 DN,因为 DNComps 参数为此签发者设置为空。另外,FilterCompsVerifyCert 的设置继承自默认条目。

    带有与 cn=Example CA 不同的签发者 DN 的证书将使用默认条目的设置,并根据证书主题中的 cn 属性生成基本 DN。这可让目录服务器在特定 DN 下启动搜索,而无需搜索整个目录。

    对于所有证书,目录服务器使用来自证书主体的 mailcn 属性生成搜索过滤器。但是,如果主题中不存在 mail 属性,Directory 服务器将自动使用主题中的证书 e 属性的值。

  2. 启用基于证书的身份验证。例如,要将基于证书的验证配置为可选,请输入:

    # dsconf <instance_name> security set --tls-client-auth="allowed"
    Copy to Clipboard Toggle word wrap

    使用 --tls-client-auth=required 选项,将基于证书的验证配置为强制。

  3. 可选: 如果您根据需要配置基于证书的身份验证,请启用 nsslapd-require-secure-binds 参数:

    # dsconf <instance_name> config replace nsslapd-require-secure-binds=on
    Copy to Clipboard Toggle word wrap

    此设置可确保用户无法使用未加密的连接绕过基于证书的验证。

  4. 可选:如果目录服务器应使用证书的身份而不是绑定请求中的凭证,请将目录服务器配置为使用 EXTERNAL 简单身份验证和安全层(SASL)机制:

    # dsconf <instance_name> config replace nsslapd-force-sasl-external=on
    Copy to Clipboard Toggle word wrap

    有了这个设置,目录服务器会忽略证书中身份的任何其他绑定方法。

  5. 重启实例:

    # dsctl <instance_name> restart
    Copy to Clipboard Toggle word wrap

后续步骤:

  • 如果您配置了 Directory Server,以便身份验证证书必须与用户 userCertificate 属性中存储的证书匹配,请将证书添加到用户条目中。

    详情请查看 第 1.7.2 节 “为用户添加证书”

1.7.2. 为用户添加证书

设置基于证书的身份验证时,您可以配置服务器,以便用于身份验证的证书必须与用户 userCertificate 二进制文件属性中存储的证书匹配。如果启用此功能,您必须将受影响用户的证书添加到其目录条目中。

前提条件

  • 您在目录服务器中启用了基于证书的身份验证。
  • 您有一个由服务器信任的证书颁发机构(CA)发布的客户端证书。
  • 客户端证书采用区分编码规则(DER)格式。
  • 客户端证书满足服务器上 /etc/dirsrv/slapd-<instance_name>/certmap.conf 中设置的要求。

流程

  1. 如果证书不是 DER 格式,请转换它。例如,要将证书从隐私增强邮件(PEM)转换为 DER,请输入:

    # openssl x509 -in /home/user_name/certificate.pem -out /home/user_name/certificate.der -outform DER
    Copy to Clipboard Toggle word wrap
  2. 将证书添加到用户的 userCertificate 属性中:

    # ldapmodify -D "cn=Directory Manager" -W -H ldaps://server.example.com -x
    
    dn: uid=user_name,ou=People,dc=example,dc=com
    changetype: modify
    add: userCertificate
    userCertificate:< file:///home/user_name/example.der
    Copy to Clipboard Toggle word wrap

验证

  1. 使用基于证书的身份验证以用户身份进行身份验证:

    1. 将以下环境变量设置为 CA 证书、用户密钥和用户证书的对应路径:

      LDAPTLS_CACERT=/home/user_name/CA.crt
      LDAPTLS_KEY=/home/user_name/user.key
      LDAPTLS_CERT=/home/user_name/user.der
      Copy to Clipboard Toggle word wrap

      或者,在当前用户的 ~/.ldaprc 文件中设置 TLS_CACERTTLS_KEYTLS_CERT 参数。

    2. 连接到服务器:

      # ldapwhoami -H ldaps://server.example.com -Y EXTERNAL
      dn: uid=example,ou=people,dc=example,dc=com
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat