需要 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的TLS配置

是否可以使用 Traefik 通过 SSL 代理 PostgreSQL?

traefik 配置自动申请ssl免费证书

Nextcloud 在 traefik on unraid 后面的 docker 中

traefik 代理后面的 docker 中的 gitlab 失败(通常)

Traefik:无法使用摘要身份验证登录服务