我运行使用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 Keystore中导入多个文件,因此将.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;

    }

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

在浏览器上,我看到以下内容:



启动应用程序时显示。



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

最佳答案



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

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

关于docker - 具有HTTPS的Keycloak keystore 和Java keystore ->重定向循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59446436/

10-15 12:03