在 Active Directory 上为基于 PKINIT 的 Kerberos 登录创建证书

Create Certificates for PKINIT-based Kerberos login on Active Directory

我正在尝试在 Active Directory 上设置基于 PKINIT 的 Kerberos 登录。应在 Linux 上使用 sssd 执行登录。但是,kerberos 服务器不接受客户端证书。我们收到事件 ID 为 21 的错误:用户 REALM/Domainuser 的证书在服务器上无效并且 sssd 显示:客户端名称不匹配。

证书是在另一台 Linux 机器上通过以下过程创建的:

我们在托管 AD 本身的 Windows 服务器上安装了 AD CA。我们将此 CA 的证书导出到 Linux 机器并将其私钥和证书存储在 ca_privkey.pemca_cert.pem 文件中以与 openssl.[=25= 一起使用]

我们在创建签名时使用的 client_cert 是使用 sssd 建议的模板创建的。我们唯一添加的是 crlDistributionPoints 选项以包含 CA 的 CRL:

[client_cert]
basicConstraints=CA:FALSE
keyUsage=digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=1.3.6.1.5.2.3.4
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name
crlDistributionPoints=URI:http://link-to-CRL-of-CA

[princ_name]
realm=EXP:0,GeneralString:${ENV::REALM}
principal_name=EXP:1,SEQUENCE:principal_seq

[principal_seq]
name_type=EXP:0,INTEGER:1
name_string=EXP:1,SEQUENCE:principals

[principals]
princ1=GeneralString:${ENV::CLIENT}

用于认证的领域是REALM.local(等于AD域)。环境变量 REALMCLIENT 在证书创建期间设置为 REALM.LOCALpkuser 并且用户 pkuser 也存在于AD中(基于密码的登录是可能)。

我不知道为什么认证不成功。您是否知道配置中可能有什么问题或给我提示 s.t。 Windows 打印更详细的错误信息?请注意,certutil -verify -urlfetch certfile.pem 能够验证整个证书链,并且在 AD 服务器上使用 Administrator 命令执行时不会打印任何错误。

我假设 Windows 服务器上存在一些配置错误。这是我第一次配置 Windows 服务器 ;)

终于,我们弄清楚了问题出在哪里。 Windows AD 需要额外的扩展密钥使用字段才能进行身份验证。

您必须添加 1.3.6.1.5.5.7.3.21.3.6.1.4.1.311.20.2.2

此外,SAN 必须设置为:otherName:1.3.6.1.4.1.311.20.2.3;UTF8:<client-name>@<realm>