【问题标题】:Keycloak behind apache https proxy "https required"apache https代理“需要https”背后的Keycloak
【发布时间】:2019-07-08 21:22:57
【问题描述】:

我刚刚设置了一个keycloak docker容器如下:

docker run --name keycloak --net keycloak-network -e DB_ADDR=mysql -e DB_DATABASE=keycloak -e DB_USER=keycloak -e DB_PASSWORD=mypassword -d -p 8088:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=mypassword -e KEYCLOAK_HOSTNAME="keycloak.example.net" -e PROXY_ADDRESS_FORWARDING=true -e KEYCLOAK_HTTPS_PORT=443 jboss/keycloak

在我的服务器上,我有一个 apache2 网络服务器正在运行,我的站点的以下配置文件可用“keycloak.example.net”:

<virtualhost keycloak.example.net:80>
    ServerName keycloak.example.net

    Redirect permanent / https://keycloak.example.net/
</virtualhost>

<virtualhost keycloak.example.net:443>
    ServerName keycloak.example.net

    SSLEngine On

    SSLCertificateFile /etc/letsencrypt/live/keycloak.example.net/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/keycloak.example.net/privkey.pem

    SSLProxyEngine on
    ProxyPreserveHost On

    <location />
        Order allow,deny
        Allow from all
        Require all granted
        ProxyPass http://localhost:8088/
        ProxyPassReverse http://localhost:8088/
    </location>
</virtualhost>

我的 apache 网络服务器已经将我(强制 https,如您所见)正确重定向到我的 docker 容器,该容器在我的主机上的 8088 端口上运行,在 docker-containers 内部端口 8080 上。

只要我访问https://keycloak.example.net/auth - 它会尝试将我重定向到正确的 keycloak 站点,但随后会引发此错误:

HTTPS required

我必须改变什么才能让它工作?

【问题讨论】:

  • 我今天突然开始看到这个错误。我很困惑,因为我长期以来一直在使用相同的配置和 keycloak 图像。也许有时间依赖性在起作用?
  • 我的设置完全是源代码控制的,所以我仍然不明白为什么它坏了。尽管如此,以防它帮助其他人:我将master领域的sslRequired设置从external更改为none。我还没弄清楚为什么external 以前工作过。
  • @Mario 你的设置是什么?您是运行容器还是从源代码构建?
  • 你有没有看过这个答案stackoverflow.com/questions/47068266/…这似乎是一个非常相似的案例。
  • @WaldemarEnns 在生产中,我们在 Kubernetes 上运行,但有问题的设置用于本地开发。我们正在运行jboss/keycloak docker 镜像。 docker 镜像支持迁移,所以我们使用 JSON 配置文件来设置我们的领域和一些脚本来启用服务帐户。

标签: apache docker https webserver keycloak


【解决方案1】:

解决方案

所以我终于可以用这种方式修复我的错误了:

  1. /etc/apache2/sites-available 目录中编辑我的keycloak.example.conf
...
<virtualhost keycloak.example.net:443>
...
RequestHeader set X-Forwarded-Proto "https"
...
  1. 确保在 apache 中启用 headers 模块:a2enmod headers
  2. 重启我的apache服务器:service apache2 restart

结论

看来我只是没有配置我的 apache 服务器以必要的方式转发 https 流量。

我希望我可以帮助某人解决此问题并为您节省一些时间。非常感谢@Boomer,他发布了必要的链接,也感谢@Mario,他支持这个孤独的问题并向我展示了他的解决方案。

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 1970-01-01
    • 2017-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多