需要Keycloak Docker HTTPS

时间:2018-04-16 13:55:22

标签: docker https keycloak

我已在我的Digital Ocean Docker Droplet上初始化https://hub.docker.com/r/jboss/keycloak/

$docker run -e KEYCLOAK_USER=admin -e -p 8080:8080 KEYCLOAK_PASSWORD={password with upcase etc.} jboss/keycloak

  

成功

一切运行良好,服务器在端口上的Droplets IP地址中启动:8080。

当我从URL中的UI进入管理控制台时,问题就开始了。有一条消息:“需要HTTPS”。这是一个真正的问题,我找到的唯一解决方案是从控制台登录Keycloak并在没有UI的情况下从管理控制台更改HTTPS = required的设置。

然后我打开了我的Docker容器的bash:

$docker exec -it keycloak bash

  

成功

当我输入我的命令登录keycloak / bin文件夹时:

cd keycloak/bin

keycloak/bin $./kcadm.sh config credentials --server http://<droplet IP>:8080/auth --realm master --user admin --password {password with upcase etc.}

  

bash冻结并在一段时间后发出超时消息

从bash登录的原因将完成:

keycloak/bin $ ./kcadm.sh update realms/master -s sslRequired=NONE

希望能解决所需的HTTPS原始问题。

6 个答案:

答案 0 :(得分:16)

发布端口8443(HTTPS)并使用它而不是8080(HTTP):

docker run \
  --name keycloak \
  -e KEYCLOAK_USER=myadmin \
  -e KEYCLOAK_PASSWORD=mypassword \
  -p 8443:8443 \
  jboss/keycloak

Keycloak在此设置中为https生成自签名证书。当然,这不是生产设置。

答案 1 :(得分:5)

这是一个解决方案,当使用https://fiddle.jshell.net/mj4mvvd5/5/作为起点而DigitalOcean作为服务提供商时,也授予了对没有安全性的管理控制台的访问权限:

启动容器:

$ docker run {containerName}

打开容器的bash:

$ docker exec -it {containerName} bash

转到:

$ cd keycloak/bin

使用以下命令创建新的管理员用户:

$ ./add-user-keycloak.sh --server http://{IP}:8080/admin    
--realm master --user admin --password newpassword

(不是很多地方建议的add-user.sh)

将DigitalOcean等中的Droplet重新启动到关闭之前创建的激活管理员用户。使用以下命令重新启动Droplet登录后

$ ./kcadm.sh config credentials --server http://localhost:8080/auth 
--realm master --user admin

更改领域的ssl设置:

$ ./kcadm.sh update realms/master -s sslRequired=NONE

此解决方案不会创建任何安全性,但允许您访问管理控制台。

在此之后,建议开始工作: https://hub.docker.com/r/jboss/keycloak/

答案 2 :(得分:2)

以下命令序列对我有用

在主机VM上:

docker run --name key -d -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin jboss/keycloak
docker exec -it key bash

在容器内:

cd keycloak/bin/
./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin 
Logging into http://localhost:8080/auth as user admin of realm master
Enter password: admin
./kcadm.sh update realms/master -s sslRequired=NONE

答案 3 :(得分:1)

以防万一有人想在 Docker Swarm 上使用它,使用机密来存储证书文件和管理员凭据:

  keycloak:
    image: jboss/keycloak
    container_name: keycloak-server
    hostname: keycloak-server
    ports:
      - target: 8443 # Keycloak HTTPS port
        published: 8443
        mode: host
      - target: 8080 # Keycloak HTTP port
        published: 8080
        mode: host
    networks: 
      default:
        aliases: 
          - keycloak-server
    deploy:
      replicas: 1
    secrets:
      - keycloak_user_file
      - keycloak_password_file
      - source: server_crt
        target: /etc/x509/https/tls.crt
        uid: '103'
        gid: '103'
        mode: 0440
      - source: server_key
        target: /etc/x509/https/tls.key
        uid: '103'
        gid: '103'
        mode: 0440
    environment: 
      - KEYCLOAK_USER_FILE=/run/secrets/keycloak_user_file
      - KEYCLOAK_PASSWORD_FILE=/run/secrets/keycloak_password_file

secrets:
  server_crt:
    file: ./certs/server.crt
  server_key:
    file: ./certs/server.key
  keycloak_user_file:
    file: ./keycloak/adminuser
  keycloak_password_file:
    file: ./keycloak/adminpassword

答案 4 :(得分:0)

在尝试配置凭据时,我也遇到了bash冻结的情况。

--password命令中添加config credentials参数导致成功执行:

./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --password {YOUR_PASSWORD_HERE}

执行./kcadm.sh config credentials,以获取传递参数的安全/替代方法的示例。

答案 5 :(得分:0)

在 Jboss/Keyclok 12.0.0 之后更新

在服务器中使用以下命令,无需通过 bash 登录 docker 容器。

$ docker exec <container_id> /opt/jboss/keycloak/bin/kcadm.sh update realms/master -s sslRequired=NONE --server http://localhost:8080/auth --realm master --user <admin_username> --password <admin_password>

以realm master的admin用户身份登录http://localhost:8080/auth