我已经在我的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_FILE
和KC_HTTPS_CERTIFICATE_KEY_FILE
。与一个jboss略有不同。