我在向Docker上运行的Keycloak添加SSL证书时遇到问题。我从AWS EC2获得了带有Load Balancer的SSL证书,但不知道如何将它添加到docker上的Keycloak。我正在浏览谷歌,但还没有找到。
此外,当我去页面像:https://stackoverflow.com,ssl完美的工作。但是当我试图打开https://stackoverflow.com:8443(因为8443是Keycloak的端口)它不起作用。
这是Keycloak的Dockerfile代码:
FROM jboss/keycloak:4.6.0.Final
WORKDIR /opt/jboss/keycloak
COPY realm-export.json /opt/jboss/keycloak/
EXPOSE 8443
ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ]
CMD ["-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-Dkeycloak.import=realm-export.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"]
这是docker-compose.yml文件:
version: '2'
services:
keycloak:
build: "./Keycloak + actibook-app client import"
depends_on:
- keycloak-postgres
environment:
- KEYCLOAK_USER=${KEYCLOAK_USER}
- KEYCLOAK_PASSWORD=${KEYCLOAK_PASSWORD}
- KEYCLOAK_IMPORT=${KEYCLOAK_IMPORT}
- POSTGRES_USER=${KEYCLOAK_DATABASE_USER}
- POSTGRES_PASSWORD=${KEYCLOAK_DATABASE_PASSW}
- POSTGRES_PORT_5432_TCP_ADDR= keycloak-postgres
ports:
- "8443:8443"
labels:
- "traefik.frontend.passHostHeader=true"
traefik:
build: ./traefik
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
README是一个好朋友 - https://hub.docker.com/r/jboss/keycloak/:
Setting up TLS(SSL)
Keycloak图像允许您指定私钥和用于提供HTTPS的证书。在这种情况下,您需要提供两个文件:
tls.crt - a certificate tls.key - a private key
这些文件需要挂载在/ etc / x509 / https目录中。图像将自动将它们转换为Java密钥库并重新配置Wildfly以使用它。
但这只是Keycloak TLS容器配置。您正在使用Traefik,因此您可能需要在Traefik容器中配置TLS - 这取决于您的配置。
我低于评论代表。所以我在这里添加一个答案。我的假设是你的所有组件都是docker容器。
@Jan Garaj的答案原则上是正确的。不清楚的是,您的案例中的逻辑路由看起来像这样(服务端):
service --> Keyclaok --> traefik --> network/dns --> user/browser
实际路由看起来像这样(即假设常见的桥接器网络):
service
|---------> traefik --> network/dns --> user/browser
keyclaok
volumes:
文件中指定一个docker-compose.yml
指令(如前所述)。InsecureSkipVerify = true
添加到Traefik配置文件的顶部(即traefik.toml
)。只需在服务keycloak用户:root中插入docker-compose.yml即可
keycloak映像以root身份安装,但容器的执行是以jboss完成的,但目录权限不允许jboss创建jks来执行https。
如果以root身份运行容器,则可以正常工作。
另一种方法是通过修改存储证书的目录的权限来创建新映像。