第 7 章 配置基于证书的身份验证

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

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

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

  • 提高了效率:与证书数据库密码进行身份验证,然后为所有后续绑定或身份验证操作使用该证书比重复提供可分辨的名称(DN)和密码更有效。
  • 提高安全性:由于基于证书的验证使用公钥加密,因此基于证书的身份验证更为安全,而非certificate 绑定操作。攻击者无法通过网络拦截绑定凭证。如果证书或设备丢失,则在没有 PIN 的情况下使用,因此很容易与第三方的干扰,比如网络攻击。

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

前提条件

  • 您在 Directory 服务器中启用了 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

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

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

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

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

    # dsconf -D "cn=Directory Manager" ldap://server.example.com security set --tls-client-auth="allowed"

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

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

    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-require-secure-binds=on

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

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

    # dsconf -D "cn=Directory Manager" ldap://server.example.com config replace nsslapd-force-sasl-external=on

    使用这个设置时,Directory 服务器会忽略与证书中身份以外的任何其他绑定方法。

  5. 重启实例:

    # dsctl instance_name restart

后续步骤:

  • 如果您配置了 Directory 服务器,以便身份验证证书必须与用户的 userCertificate 属性中存储的证书匹配,请将证书添加到用户条目。详情请查看 第 7.2 节 “将证书添加到用户”