8.6. X.509 客户端证书用户身份验证


如果您已将服务器配置为使用 mutual SSL 身份验证,则 Red Hat build of Keycloak 支持使用 X.509 客户端证书登录。

一个典型的工作流:

  • 客户端通过 SSL/TLS 频道发送身份验证请求。
  • 在 SSL/TLS 握手期间,服务器和客户端会交换其 x.509/v3 证书。
  • 容器(JBoss EAP)验证证书 PKIX 路径和证书过期日期。
  • X.509 客户端证书验证器使用以下方法验证客户端证书:

    • 使用 CRL 或 CRL 分发点检查证书撤销状态。
    • 使用 OCSP 检查证书撤销状态(在线证书状态协议)。
    • 验证证书中的密钥是否与预期键匹配。
    • 验证证书中的扩展密钥是否与预期的扩展密钥匹配。
  • 如果其中任何检查失败,x.509 身份验证会失败。否则,验证器提取证书身份并将其映射到现有用户。

当证书映射到现有用户时,行为会根据身份验证流进行分类:

  • 在 Browser Flow 中,服务器会提示用户确认其身份或使用用户名和密码登录。
  • 在 Direct Grant Flow 中,服务器在用户中签名。
重要

请注意,这是 Web 容器负责验证证书 PKIX 路径。在 Red Hat build of Keycloak 端的 X.509 验证器只为检查证书过期、证书撤销状态和密钥用法提供了额外的支持。如果您使用在反向代理后部署的红帽 Keycloak 构建,请确保将反向代理配置为验证 PKIX 路径。如果您不使用反向代理和用户直接访问 JBoss EAP,则应该非常正常,因为 JBoss EAP 确保 PKIX 路径已被验证,只要它配置如下。

8.6.1. 功能

支持的证书身份源:

  • 使用正则表达式匹配 SubjectDN
  • X500 主题的电子邮件属性
  • X500 Subject 来自 Subject Alternative Name Extension (RFC822Name General Name)的电子邮件。
  • 来自 Subject Alternative Name Extension 的其他名称。这个其他名称是用户主体名称(UPN),通常为.
  • X500 Subject 的通用名称属性
  • 使用正则表达式匹配 IssuerDN
  • 证书序列号
  • 证书序列号和 IssuerDN
  • SHA-256 证书指纹
  • PEM 格式的完整证书

8.6.1.1. 正则表达式

Red Hat build of Keycloak 通过使用正则表达式作为过滤器从 Subject DN 或 Issuer DN 中提取证书身份。例如,此正则表达式与 email 属性匹配:

emailAddress=(.*?)(?:,|$)

如果将 Identity Source 设置为 Match SubjectDN using regular expressionMatch IssuerDN using regular expression,会应用正则表达式过滤。

8.6.1.1.1. 将证书身份映射到现有用户

证书身份映射可以将提取的用户身份映射到现有用户的用户名、电子邮件或其值与证书身份匹配的自定义属性。例如,将 Identity source 设置为 Subject 的电子邮件 或用户映射方法到 Username 或 email 可使 X.509 客户端证书验证器在按用户名或电子邮件 搜索现有用户时,使用证书的主题 DN 中的 email 属性作为搜索条件。

重要
  • 如果您在域设置中禁用 Login with email,则相同的规则适用于证书身份验证。用户无法使用 email 属性登录。
  • 使用证书序列号和 IssuerDN 作为身份源,需要两个自定义属性用于序列号和 IssuerDN。
  • SHA-256 证书指纹 是 SHA-256 证书指纹的小写十六进制表示。
  • 使用 PEM 格式的 Full certificate 作为身份源仅限于映射到外部联邦源(如 LDAP)的自定义属性。由于长度限制,Red Hat build of Keycloak 无法在其数据库中存储证书,因此当是 LDAP 时,您必须启用 Always Read Value from LDAP
8.6.1.1.2. 扩展证书验证
  • 使用 CRL 吊销状态检查。
  • 使用 CRL/Distribution Point 吊销状态检查。
  • 使用 OCSP/Responder URI 吊销状态检查。
  • 证书密钥验证。
  • 证书扩展密钥用法验证。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

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

让开源更具包容性

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

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部