设置 SSL 后 Keycloak 在 https 上不起作用

Posted

技术标签:

【中文标题】设置 SSL 后 Keycloak 在 https 上不起作用【英文标题】:Keycloak does not work on https after setting up SSL 【发布时间】:2020-04-15 00:42:42 【问题描述】:

我有一个不知道为什么会发生的问题。

我有用于创建 .pfx 文件的 LetsEncrypt 证书。

openssl pkcs12 -export -out /tmp/certificate.pfx -inkey /etc/letsencrypt/live/ds-gym.de/privkey.pem -in /etc/letsencrypt/live/ds-gym.de/cert.pem -certfile /etc/letsencrypt/live/ds-gym.de/chain.pem

我设置了 keycloak 8.0.1。按照本教程(https://medium.com/@hasnat.saeed/setup-keycloak-server-on-ubuntu-18-04-ed8c7c79a2d9)作为服务,它运行良好。 Keycloak 似乎设置了一个自签名证书,这不是我想要的。首先我为 SSL 设置 Keycloak。

使用 JBoss-cli.sh 文件,我执行以下操作(此处描述:https://www.keycloak.org/docs/latest/server_installation/#setting-up-https-ssl)

    /core-service=management/security-realm=UndertowRealm:add()
    /core-service=management/security-realm=UndertowRealm/server-identity=ssl:add(keystore-path=keycloak.jks, keystore-relative-to=jboss.server.config.dir, keystore-password=secret)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=security-realm, value=UndertowRealm)

我的安全团队不是这样的:

    <security-realm name="UndertowRealm">
        <server-identities>
            <ssl>
                <keystore path="keycloak.jks" relative-to="jboss.server.config.dir" keystore-password="secret"/>
            </ssl>
        </server-identities>
    </security-realm>

我现在导入证书:

keytool -importkeystore -srckeystore /tmp/certificate.pfx -srcstoretype pkcs12 -destkeystore /opt/keycloak/standalone/configuration/keycloak.jks -deststoretype JKS

然后我重新启动keycloak:

systemctl restart keycloak

现在我收到以下错误:

HTTP 错误 502

如果有帮助,您也可以查看我网站的网络选项卡。

keycloak 服务已启动并正在运行,但它似乎不再在端口 8443 上运行。

监听器看起来像这样:

    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="UndertowRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <http-invoker security-realm="ApplicationRealm"/>
        </host>
    </server>

知道为什么会这样吗?我的证书错了吗?我已经对 Keycloak 感到非常绝望:-(

编辑:

这是我记录的错误:

]) - 失败描述:"WFLYCTL0080: 失败的服务" => “org.wildfly.core.management.security.realm.UndertowRealm.key-manager” => "WFLYDM0018: 无法启动服务 引起:java.security.UnrecoverableKeyException:无法恢复密钥“ 2019-12-23 19:12:57,421 INFO [org.jboss.as.server] (ServerService 线程池 -- 43) WFLYSRV0010: 已部署 “keycloak-server.war”(运行时名称:“keycloak-server.war”) 2019-12-23 19:12:57,423 INFO [org.jboss.as.controller](控制器 引导线程)​​WFLYCTL0183:服务状态报告WFLYCTL0186: 启动失败的服务:service org.wildfly.core.management.security.realm.UndertowRealm.key-manager: WFLYDM0018:无法启动服务 WFLYCTL0448:2 个附加服务 由于依赖项丢失或失败而关闭 2019-12-23 19:12:57,569 INFO [org.jboss.as.server](控制器引导线程) WFLYSRV0212:恢复服务器 2019-12-23 19:12:57,578 信息 [org.jboss.as](控制器引导线程)​​WFLYSRV0060:Http 管理 接口监听http://127.0.0.1:9990/management 2019-12-23 19:12:57,579 INFO [org.jboss.as](控制器引导线程) WFLYSRV0051:管理控制台监听 http://127.0.0.1:9990 2019-12-23 19:12:57,580 错误 [org.jboss.as](控制器引导线程) WFLYSRV0026:Keycloak 8.0.1(WildFly Core 10.0.3.Final)已启动(使用 错误)在 41093 毫秒内 - 启动了 888 个服务中的 586 个(4 个服务失败或 缺少依赖项,604 服务是惰性的、被动的或按需的)

【问题讨论】:

【参考方案1】:

看起来密钥库生成不正确。检查:

您将keystore-password 的值设置为与实际密钥库密码匹配。 您为根证书设置了别名root。 您为域证书设置了别名yourdomain.com

尝试完全按照文档中描述的步骤进行操作。

【讨论】:

文档是指链接?我没有使用自签名证书,而是来自 LetsEncrypt 的证书。那有区别吗?如果你能告诉我这些步骤,我将非常感激。我对 SSL 知之甚少 是的,在第一步中您使用私钥生成了密钥库,您可以使用此私钥为letsencrypt创建CSR。从letsencrypt获得证书后,只需将它们导入密钥库。我找到了一个很好的 WildFly 分步指南(Keycloak 在 WildFly 之上工作)github.com/antoniopaolacci/… 我搞定了。我的密钥库确实是错误的。现在我面临一个新问题:-)

以上是关于设置 SSL 后 Keycloak 在 https 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

需要 SSL 来验证 traefik 后面的 keycloak

为啥 keycloak 会删除重定向 uri 中的 SSL?

如何使用反向代理修复 Keycloak 中的“我们很抱歉需要 HTTPS”?

使用 nginx 的 Keycloak 重定向 url 将转到 http 而不是 https

JBoss/Keycloak 服务器:更新自签名服务器 Ssl 证书

带有 NGINX 代理服务器的 Keycloak 未验证 rest api