You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Traefik反向代理Keycloak出现SSL required认证错误及安全性疑问

问题结论

你当前采用的keycloak.ssl-required = none的临时修复方案存在极高安全风险,禁止在生产环境使用。

问题根因解释

你遇到的告警本质是Keycloak的SSL校验机制触发:

SSL is required to authenticate. Remote address IP is secure: false, SSL required for: EXTERNAL .

Keycloak部署在Traefik反向代理后,Traefik对外提供HTTPS访问,但Traefik和Keycloak/后端Spring应用的内部通信走HTTP协议,默认配置下Keycloak适配器无法识别原始请求是HTTPS,误判为外部HTTP请求访问,所以触发拦截返回401。
你之前尝试移除X-Forwarded-*相关请求头的操作是完全反向的错误操作,这类头正是用来让后端服务识别原始请求协议、IP的核心参数。

为什么ssl-required = none不安全

该配置会完全关闭Keycloak的SSL校验要求,允许所有HTTP请求完成认证流程,攻击者可以通过HTTP协议嗅探到用户的账号密码、登录令牌等敏感凭证,直接导致用户身份被窃取,业务完全暴露在数据泄露风险中。

标准安全修复方案

  1. 替换Traefik的请求头配置,从移除头改为正确传递原始请求信息:
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-Proto=https
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-Host=<你的Keycloak对外域名>
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-For=%[remote_addr]
  1. 给你的Spring应用添加配置,让Keycloak适配器信任代理转发的头信息:
server.forward-headers-strategy: native
  1. 开启Keycloak服务端的代理地址转发信任配置,Keycloak启动时添加环境变量:
    PROXY_ADDRESS_FORWARDING=true
  2. 把keycloak.ssl-required配置恢复为默认值external,同时将Keycloak管理后台对应Realm的SSL Required参数改回External requests,保证所有公网请求强制走HTTPS,内部代理通信不做额外限制。

内容的提问来源于stack exchange,提问作者jakob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:24:05