我在将SSL证书添加到在docker上运行的Keycloak时遇到问题。我从带有负载均衡器的AWS EC2获得了SSL证书,但不知道如何将其添加到Docker上的Keycloak。我正在浏览Google,但没有找到。
此外,当我转到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
答案 0 :(得分:1)
您需要确保Docker内部的jboss用户可以读取密钥文件。这是我的解决方案中的一些关键步骤: 1.从我们获取加密的证书/密钥。 2.将文件模式更改为655 3.将它们安装到密钥斗篷: -/opt/www/sso/cert/fullchain.pem:/etc/x509/https/tls.crt -/opt/www/sso/cert/privkey.pem:/etc/x509/https/tls.key 4.启动docker镜像 5.将密钥文件的文件模式更改回600。
答案 1 :(得分:0)
自述文件是一个好朋友-https://hub.docker.com/r/jboss/keycloak/:
设置TLS(SSL)
Keycloak图片可让您同时指定私钥和 用于提供HTTPS的证书。在这种情况下,您需要提供两个 文件:
tls.crt - a certificate tls.key - a private key
这些文件需要挂载在/ etc / x509 / https目录中。图片 会自动将它们转换为Java密钥库并重新配置 要使用它的Wildfly。
但这只是Keycloak TLS容器配置。您还在使用Traefik,因此您可能需要在Traefik容器中配置TLS-这取决于您的配置。
答案 2 :(得分:0)
我在评论代表下方。水平,所以我在这里添加答案。我的假设是您所有的组件都是docker容器。
@Jan Garaj的回答原则上是正确的。还不清楚您所用的逻辑路由如下所示(服务端):
service --> Keyclaok --> traefik --> network/dns --> user/browser
实际路由如下所示(即假设使用通用网桥docker网络):
service
|---------> traefik --> network/dns --> user/browser
keyclaok
volumes:
文件中指定一个docker-compose.yml
指令(如前所述)。 InsecureSkipVerify = true
添加到Traefik配置文件(即traefik.toml
)的顶部。答案 3 :(得分:0)
只需在服务keycloak用户:root中插入docker-compose.yml
keycloak映像是作为root安装的,但是容器的执行是作为jboss完成的,但是目录权限不允许jboss创建jks来执行https。
如果您以根用户身份运行容器,则它可以正常工作。
另一种替代方法是通过修改存储证书的目录的权限来创建新映像。