8.7. 启用客户端证书查找
当代理配置为 TLS 终止代理时,客户端证书信息可以通过特定的 HTTP 请求标头转发到服务器,然后用来验证客户端。您可以配置服务器如何检索客户端证书信息,具体取决于您使用的代理。
通过 X.509 身份验证的代理标头进行客户端证书查找被视为安全敏感。如果配置错误,则使用伪客户端证书标头进行身份验证。需要采取额外的预防措施,以确保在通过代理标头传递时可以信任客户端证书信息。
- 仔细检查您的用例需要重新加密或边缘 TLS 终止,这意味着使用代理标头进行客户端证书查找。当需要 X.509 身份验证时,建议使用 TLS passthrough 作为更安全的选项,因为它不需要通过代理标头传递证书。代理标头中的客户端证书查找仅适用于重新加密和边缘 TLS 终止。
如果 passthrough 不是一个选项,请实现以下安全措施:
- 配置网络,以便红帽构建的 Keycloak 被隔离,只能接受来自代理的连接。
-
确保代理覆盖
spi-x509cert-lookup-<provider>-ssl-client-cert
选项中配置的标头。 -
请记住,任何
spi-x509cert Case
选项都没有反映proxy-trusted-addresses
选项。 -
额外注意
spi-x509cert-lookup-<provider>-trust-proxy-verification
设置。请确保仅在信任代理以验证客户端证书时启用它。在没有代理验证客户端证书链的情况下,设置 spi-x509cert-lookup-<provider>-trust-proxy-verification=true
将红帽构建的 Keycloak 公开给安全漏洞。
服务器支持一些最常见的 TLS 终止代理,例如:
Proxy | 供应商 |
---|---|
Apache HTTP 服务器 | Apache |
HAProxy | hapoxy |
NGINX | nginx |
要配置如何从您需要的请求检索客户端证书:
启用对应的代理供应商
bin/kc.[sh|bat] build --spi-x509cert-lookup-provider=<provider>
配置 HTTP 标头
bin/kc.[sh|bat] start --spi-x509cert-lookup-<provider>-ssl-client-cert=SSL_CLIENT_CERT --spi-x509cert-lookup-<provider>-ssl-cert-chain-prefix=CERT_CHAIN --spi-x509cert-lookup-<provider>-certificate-chain-length=10
在配置 HTTP 标头时,您需要确保使用的值与代理转发的标头名称对应。
配置供应商的可用选项包括:
选项 | 描述 |
---|---|
ssl-client-cert | 保存客户端证书的标头名称 |
ssl-cert-chain-prefix |
标头包含链中额外证书的前缀,并用于在链的长度中相应地检索单个证书。例如,值 |
certificate-chain-length | 证书链的最大长度。 |
trust-proxy-verification | 启用信任 NGINX 代理证书验证,而不是将证书转发到红帽构建的 Keycloak,并在红帽构建的 Keycloak 中进行验证。 |
8.7.1. 配置 NGINX 供应商
NGINX SSL/TLS 模块不会公开客户端证书链。红帽构建的 Keycloak 的 NGINX 证书查找供应商使用红帽构建的 Keycloak 信任存储重建它。
如果您使用这个供应商,请参阅 配置可信证书 以了解如何配置红帽构建的 Keycloak Truststore。