2

我运行用 Docker 构建的 keycloak 并遇到一个奇怪的错误。这是我的 Keycloak 的 Dockerfile。它使用 LetsEncrypt 证书将 .pem 文件更改为 .crt 和 .key 文件,因为 Keycloak 密钥库需要 tls.crt 和 tls.key 文件。

docker run  -d \
 -v /etc/letsencrypt/live/ds-gym.de/tls.crt:/etc/x509/https/tls.crt \
 -v /etc/letsencrypt/live/ds-gym.de/tls.key:/etc/x509/https/tls.key \
 -e KEYCLOAK_USER=myadmin \
 -e KEYCLOAK_PASSWORD=mypassword \
 -p 8443:8443 jboss/keycloak

我从以下文件运行另一个 docker 容器:由于无法在 Java 密钥库中导入多个文件,因此我将 .crt 和 .key 转换为 .der 文件,并尝试了 .p12 文件。两者都没有工作。

FROM openjdk:8-jre

COPY certificate.pfx $JAVA_HOME/jre/lib/security/certificate.pfx

RUN \
    cd $JAVA_HOME/jre/lib/security \
    keytool -importkeystore -srckeystore certificate.pfx -srcstorepass -changeit -srcstoretype pkcs12 -destkeystore cacerts -deststorepass changeit -deststoretype JKS

RUN mkdir -p /opt/shinyproxy/
RUN wget https://www.shinyproxy.io/downloads/shinyproxy-2.3.0.jar -O /opt/shinyproxy/shinyproxy.jar
COPY application.yml /opt/shinyproxy/application.yml

WORKDIR /opt/shinyproxy/
CMD ["java", "-jar", "/opt/shinyproxy/shinyproxy.jar"]

它通过以下命令启动:

sudo docker run -v /var/run/docker.sock:/var/run/docker.sock --net sp-example-net -p 5000:5000 shinyproxy-example

Nginx 作为反向代理位于端点前面:它是这样完成的:

location / {

        proxy_pass          http://127.0.0.1:5000;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 600s;

       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_read_timeout 600s;

       proxy_redirect    off;
       proxy_set_header  Host             $http_host;
       proxy_set_header  X-Real-IP        $remote_addr;
       proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
       proxy_set_header  X-Forwarded-Proto $scheme;


    }

    location /auth/ {

        proxy_pass          https://127.0.0.1:8443;

       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
       proxy_read_timeout 600s;

       proxy_redirect    off;
       proxy_set_header  Host             $http_host;
       proxy_set_header  X-Real-IP        $remote_addr;
       proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
       proxy_set_header  X-Forwarded-Proto $scheme;

    }

我想我将 .der/.p12 文件复制到其中的 Java Keystore 可能存在问题,但也许它也与 keycloak 有关。这些是我的错误:

在浏览器上,我看到了这个:

ERR_TOO_MANY_REDIRECTS

这在启动应用程序时显示。

2019-12-22 17:14:06.033 WARN 1 --- [XNIO-2 task-6] aaClientIdAndSecretCredentialsProvider:客户端“帐户”没有可用的秘密 2019-12-22 17:14:06.050 错误 1 ​​--- [XNIO-2 task-6] okadapters.OAuthRequestAuthenticator:无法将代码转换为令牌

原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

谁能帮助我如何正确导入证书?

4

1 回答 1

1

原因:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

您的 Keycloak 证书很可能/etc/letsencrypt/live/ds-gym.de/tls.crt不包含完整的证书链。这是 LE 证书非常常见的问题。ssllabs.com 还报告ds-gym.de域的链问题。请修复证书(使用全链 pem 证书格式)并重新启动 Keycloak。

至少这是您设置中的一个明显问题。

于 2019-12-25T15:44:37.343 回答