8.5. X.509 客户端证书用户身份验证
如果您已将服务器配置为使用 mutual SSL 身份验证,则 Red Hat Single Sign-On 支持使用 X.509 客户端证书登录。
典型的工作流:
- 客户端通过 SSL/TLS 频道发送身份验证请求。
- 在 SSL/TLS 握手期间,服务器和客户端会交换其 x.509/v3 证书。
- 容器(JBoss EAP)验证证书 PKIX 路径和证书到期日期。
X.509 客户端证书验证器使用以下方法之一验证客户端证书:
- 使用 CRL 或 CRL 分发点检查证书撤销状态。
- 使用 OCSP (在线证书状态协议)检查证书撤销状态。
- 验证证书中的密钥是否与预期的密钥匹配。
- 验证证书中的扩展密钥是否与预期的扩展密钥匹配。
- 如果这些检查中有任何一个失败,x.509 身份验证会失败。否则,身份验证器会提取证书身份并将其映射到现有用户。
当证书映射到现有用户时,行为会根据身份验证流来剥离:
- 在浏览器流中,服务器会提示用户确认其身份或使用用户名和密码登录。
- 在 Direct Grant 流中,服务器会登录到用户。
请注意,Web 容器负责验证证书 PKIX 路径。Red Hat Single Sign-On 一侧的 X.509 验证器只提供对检查证书过期、证书撤销状态和密钥使用的额外支持。如果您在使用在反向代理后部署的 Red Hat Single Sign-On,请确保您的反向代理配置为验证 PKIX 路径。如果您不使用反向代理和用户直接访问 JBoss EAP,您应该象 JBoss EAP 一样确保验证 PKIX 路径,只要它进行了配置,如下所示:
8.5.1. 功能
支持的证书身份源:
- 使用正则表达式匹配 SubjectDN
- X500 Subject 的 email 属性
- X500 使用者电子邮件地址来自主题备用名称(RFC822Name 常规名称)
- X500 对象来自主题备用名称扩展的其他名称。这个其他名称通常是 User Principal Name (UPN)。
- X500 Subject 的 Common Name 属性
- 使用正则表达式匹配 IssuerDN
- 证书序列号
- 证书 Serial Number 和 IssuerDN
- SHA-256 证书指纹
- PEM 格式的完整证书
8.5.1.1. 正则表达式
Red Hat Single Sign-On 使用正则表达式作为过滤器从 Subject DN 或 Issuer DN 中提取证书身份。例如,此正则表达式与 email 属性匹配:
emailAddress=(.*?)(?:,|$)
如果 使用正则表达式,如果将
或 Identity Source
设置为 Match SubjectDNMatch IssuerDN,则应用正则表达式
过滤。
8.5.1.1.1. 将证书身份映射到现有用户
证书身份映射可以将提取的用户身份映射到现有用户的用户名、电子邮件或自定义属性,其值与证书身份匹配。例如,将 身份源
设置为 Subject 的电子邮件 或用户映射方法为
Username 或 email,使 X.509 客户端证书验证器使用证书主题 DN 中的 email 属性作为搜索条件,因为按用户名或电子邮件搜索现有用户。
- 如果您在 realm 设置中禁用 带有电子邮件 的登录,则同一规则适用于证书身份验证。用户无法使用 email 属性登录。
-
使用
证书 Serial Number 和 IssuerDN
作为身份源需要两个序列号和 IssuerDN 的自定义属性。 -
SHA-256 证书指纹
是 SHA-256 证书指纹的小写十六进制表示。 -
使用
PEM 格式的完整证书
作为身份源仅限于映射到外部联合源(如 LDAP)的自定义属性。由于有长限制,Red Hat Single Sign-On 无法将证书存储在其数据库中,因此,如果是 LDAP,您必须启用Always Read Value From LDAP
。
8.5.1.1.2. 扩展证书验证
- 使用 CRL 撤销状态检查。
- 使用 CRL/Distribution Point 撤销状态检查。
- 使用 OCSP/Responder URI 撤销状态检查。
- 证书密钥验证.
- 证书扩展密钥验证.