如何在Docker的密钥斗篷中添加SSL

时间:2018-12-24 11:48:40

标签: amazon-web-services docker ssl certificate keycloak

我在将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

4 个答案:

答案 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
  • Keycloak正在自身和Traefik之间创建一个自签名证书
    • 您必须在Keyclaok的volumes:文件中指定一个docker-compose.yml指令(如前所述)。
  • 如果您只想测试Keycloak是否正常工作,可以将InsecureSkipVerify = true添加到Traefik配置文件(即traefik.toml)的顶部。
  • 一旦确定可以访问Keycloak,则应该使用AWS证书对或创建自己的自签名证书(具有个人证书颁发机构)。

答案 3 :(得分:0)

只需在服务keycloak用户:root中插入docker-compose.yml

keycloak映像是作为root安装的,但是容器的执行是作为jboss完成的,但是目录权限不允许jboss创建jks来执行https。

如果您以根用户身份运行容器,则它可以正常工作。

另一种替代方法是通过修改存储证书的目录的权限来创建新映像。