Keycloak Docker HTTPS required



我已经在我的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

成功

一切正常,服务器在端口 :8080 上的 Droplets IP 地址中启动。

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

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

$docker exec -it keycloak bash

成功

当我输入命令登录钥匙斗篷/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的原始问题。

2022 年 2 月更新:

钥匙斗篷 17+(例如quay.io/keycloak/keycloak:17.0.0) 不支持自动生成自签名证书。Keycloak 17+ 的最小 HTTPS 工作示例:

1.) 生成自签名域证书/密钥(按照终端上的说明进行操作):

openssl req -newkey rsa:2048 -nodes 
-keyout server.key.pem -x509 -days 3650 -out server.crt.pem

2.) 更新密钥的权限

chmod 755 server.key.pem

3.) 启动密钥斗篷(使用卷作为证书/密钥):

docker run 
--name keycloak 
-e KEYCLOAK_ADMIN=admin 
-e KEYCLOAK_ADMIN_PASSWORD=password 
-e KC_HTTPS_CERTIFICATE_FILE=/opt/keycloak/conf/server.crt.pem 
-e KC_HTTPS_CERTIFICATE_KEY_FILE=/opt/keycloak/conf/server.key.pem 
-v $PWD/server.crt.pem:/opt/keycloak/conf/server.crt.pem 
-v $PWD/server.key.pem:/opt/keycloak/conf/server.key.pem 
-p 8443:8443 
quay.io/keycloak/keycloak:17.0.0 
start-dev

通过此设置,Keycloak 将使用 HTTPS 协议在端口 8443 上公开。如果您还使用代理(例如nginx),则需要正确配置env变量KC_PROXY(例如KC_PROXY=edge)。当然,您也可以使用keycloak.conf文件而不是 env 变量。


Keycloak 最高 16.1.1 和 Keycloak legacy 17+ 的旧答案:

发布端口 8443 (HTTPS) 并使用它代替 8080 (HTTP):

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

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

<小时 />

更新

将卷用于自己的 TLS 证书:

-v /<path>/tls.crt:/etc/x509/https/tls.crt 
-v /<path>/tls.key:/etc/x509/https/tls.key 

这是一个解决方案,当使用 https://hub.docker.com/r/jboss/keycloak/作为起点并将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)

重新启动数字海洋等中的液滴,以激活在关闭之前创建的管理员用户。重新启动快捷批处理后,使用以下命令登录:

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

更改域上的 SSL 设置:

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

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

在此之后,建议开始处理以下内容: https://www.keycloak.org/docs/latest/server_installation/index.html#setting-up-https-ssl

以下命令序列对我有用

在主机 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

以防万一有人想在 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

如果你只想禁用HTTPS,你可以用这个

docker exec -it {contaierID} bash
cd keycloak/bin
./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin
./kcadm.sh update realms/master -s sslRequired=NONE

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>

以领域主服务器的用户管理员身份登录 http://localhost:8080/auth

我在尝试配置凭据时也遇到了 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以获取传递参数的安全/备用方法的示例。

用于使用 Docker 构建 Keycloak 的情况。这对我有用:

docker exec -it demo-keycloak bash
/opt/jboss/keycloak/bin/kcadm.sh config credentials --server http://localhost:8080/auth --realm realmname --user admin --password admin 
/opt/jboss/keycloak/bin/kcadm.sh update realms/realmname -s sslRequired=NONE

解释: 第一行在 Keycloak 容器上给出了一个交互式 bash shell。 第二行和第三行对您进行身份验证,并使用 Keycloak admin-CLI 修改领域设置。无需重新启动容器

在尝试了无数种方法之后,终于让它以最简单的方式使用 https(Keycloak 14.0.0)。

  • 创建一个 docker-compose.yml 并且不要指定证书和密钥的卷:
version: '2'
services:
keycloak:
image: quay.io/keycloak/keycloak:14.0.0
command: -c standalone.xml
environment:
DB_VENDOR: h2
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
ports:
- 8080:8080
- 8443:8443
  • 使用docker-compose 运行你的 docker-compose.yml

  • 等待一分钟,Keycloak将自动生成一个自签名证书! 您将在 CLI 上看到日志:

WARN [org.jboss.as.domain.management.security](默认 I/O-3)WFLYDM0113:在/opt/jboss/keycloak/standalone/configuration/application.keystore 生成自签名证书。请注意,自签名证书不安全,只能用于测试目的。请勿在生产中使用此自签名证书。

  • 在端口 8443 上访问您的 Keycloak 服务器。

  • 如果您没有看到指示自签名证书生成的日志,只需尝试访问您的服务器,包括"https://">":8443",例如"https://your_ip_or_dns:8443/auth"。

注意您使用的图像。如果您使用 quay.io/keycloak/keycloak。您必须显式指定证书和密钥使用的路径KC_HTTPS_CERTIFICATE_FILEKC_HTTPS_CERTIFICATE_KEY_FILE。与一个jboss略有不同。

相关内容

最新更新