需要 SSL 来验证 traefik 后面的 keycloak
Posted
技术标签:
【中文标题】需要 SSL 来验证 traefik 后面的 keycloak【英文标题】:SSL is required to authenticate keycloak behind traefik 【发布时间】:2021-12-26 06:47:44 【问题描述】:我的问题是我的带有 keycloak 适配器的 spring 应用程序给了我这个警告:
需要 SSL 进行身份验证。远程地址 IP 是安全的:false,SSL 需要:EXTERNAL。
keycloak地址是https
对我的后端的每个请求都因 401 错误和控制台中的此警告而被阻止。
Keycloak 在反向代理后面:traefik
我还尝试使用 traefik 删除标题:
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-For=
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-Proto=
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Forwarded-Host=
- traefik.http.middlewares.sso.headers.customrequestheaders.X-Real-IP=
编辑:我可以使用keycloak.ssl-required = none
以及在管理面板中修复它,但这安全吗?
【问题讨论】:
【参考方案1】:keycloak.ssl-required = none
绝对不是一个安全的解决方法。有 Keycloak 文档,描述了如何正确配置它:
https://www.keycloak.org/docs/latest/server_installation/index.html#_setting-up-a-load-balancer-or-proxy
【讨论】:
当然,但不是因为负载均衡器的误报吗?请求是 HTTPS,我认为负载均衡器弄乱了标头。 @jakob 这不是误报!您是说 Keycloak 应该生成并需要 TLS。如果您有 TLS 卸载(=您的“因为 loadabalancer”用例),那么有标头告诉 Keycloak 使用哪个协议到达负载均衡器([标准] 与X-Forwarded-Proto
标头混淆),因此 Keycloak 也将接受来自 LB 的普通 HTTP 连接。只需按照文档进行即可。
Backend ---HTTPS---> Traefik ---> HTTP ---> Keycloak 但是为什么不安全呢? Traefik 和 KeyCloak 在同一台服务器上?
@jakob 抱歉,这不是聊天/论坛。通常,不要使用“keycloak.ssl-required = none”(请参阅 OIDC 规范以了解为什么需要 TLS)并根据 Keycloak 文档在 LB 上配置标头 - 然后您可以将 TLS 卸载与任何负载均衡器/反向代理一起使用(Traefik, nginx、Apache、F5、AWS ALB、...)而不影响 Keycloak 功能。以上是关于需要 SSL 来验证 traefik 后面的 keycloak的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用 Traefik 通过 SSL 代理 PostgreSQL?
Nextcloud 在 traefik on unraid 后面的 docker 中