使用docker映像的KeyClope SSL设置
我试图使用docker映像(版本4.5.0-Final)部署KeyClope,但在设置SSL时遇到了问题 根据文件 KeyClope映像允许您同时指定 提供HTTPS服务的私钥和证书。那样的话,你需要 要提供两个文件: tls.crt-证书tls.key-这些文件需要的私钥 安装在/etc/x509/https目录中。图像将自动显示 将它们转换为Java密钥库并重新配置Wildfly以使用它 我遵循给定的步骤,为卷装载设置提供了一个包含必要文件(tls.crt和tls.key)的文件夹,但我面临SSL握手问题,因此 错误\u SSL\u版本\u或\u密码\u不匹配 错误,尝试访问时阻止浏览器中的KeyClope加载 我使用letsencrypt生成pem文件,并使用openssl创建.crt和.key文件。 还尝试通过openssl创建这些文件来缩小问题范围,但行为是相同的(如果这很重要的话,可以提供一些附加信息) 默认情况下,当我只指定端口绑定-p 8443:8443而不指定cert volume mount/etc/x509/https时,Keyclope服务器会生成一个自签名证书,在浏览器中查看应用程序时不会出现问题 我猜这可能是一个证书创建问题,而不是keydepeat的任何特定问题,但是,不确定如何让它工作。使用docker映像的KeyClope SSL设置,docker,ssl,keycloak,keycloak-services,Docker,Ssl,Keycloak,Keycloak Services,我试图使用docker映像(版本4.5.0-Final)部署KeyClope,但在设置SSL时遇到了问题 根据文件 KeyClope映像允许您同时指定 提供HTTPS服务的私钥和证书。那样的话,你需要 要提供两个文件: tls.crt-证书tls.key-这些文件需要的私钥 安装在/etc/x509/https目录中。图像将自动显示 将它们转换为Java密钥库并重新配置Wildfly以使用它 我遵循给定的步骤,为卷装载设置提供了一个包含必要文件(tls.crt和tls.key)的文件夹,但我面临
感谢您提供的任何帮助经过一些研究,以下方法奏效了(对于自签名证书,我仍然需要弄清楚如何使用letsencrypt CA for prod) 使用keytool生成自签名证书 将.jks转换为.p12 从.p12密钥库生成.crt 从.p12密钥库生成.key 然后使用tls.crt和tls.key进行卷装载/etc/x509/https 此外,在安全应用程序上,在keydeport.json文件中指定以下属性
"truststore" : "path/to/keycloak.jks",
"truststore-password" : "<jks-pwd>",
“信任库”:“path/to/keydove.jks”,
“信任库密码”:“”,
我还面临着一个问题,即使用and获得一个ERR\u SSL\u VERSION\u或\u CIPHER\u MISMATCH
错误。即使考虑了其他评论的建议。现在,我有一个工作(相当简单)的设置,这可能也会帮助你
1) 生成letsencrypt证书
首先,我使用certbot为域sub.example.com
生成了我的letsencrypt证书。您可以在中找到获取证书的详细说明和其他方法,也可以在中找到用户指南
$sudo certbot certonly--独立
将调试日志保存到/var/log/letsencrypt/letsencrypt.log
选择的插件:Authenticator standalone,Installer None
请输入您的域名(逗号和/或空格分隔)(输入“c”取消):sub.example.com
获取新证书
执行以下挑战:
http-01挑战sub.example.com
正在等待验证。。。
清理挑战
重要提示:
-恭喜你!您的证书和链已保存在:
/etc/letsencrypt/live/sub.example.com/fullchain.pem
您的密钥文件已保存在:
/etc/letsencrypt/live/sub.example.com/privkey.pem
您的证书将于2020-01-27到期。获取新的或经过调整的
在将来的证书版本中,只需运行certbot即可
再一次。要以非交互方式续订*所有*证书,请运行
“证书更新”
2) 准备docker compose环境
我使用docker compose
通过docker运行keydepeat。配置文件和数据文件存储在路径/srv/docker/keydove/
中
- 文件夹
包含config
docker compose.yml
- 文件夹
包含我通过letsencrypt生成的证书data/certs
- 文件夹
映射到数据库容器以使其数据持久化data/keycloack\u db
## open internal shell of keycloack container
$ sudo docker exec -it keycloak_app /bin/bash
## open directory of certificates
$ cd /etc/x509/https/
$ ll
-rw----r-- 1 root root 3586 Oct 30 14:21 tls.crt
-rw----r-- 1 root root 1708 Oct 30 14:20 tls.key
$cp/etc/letsencrypt/live/sub.example.com/fullchain.pem/srv/docker/keybeave/data/certs/tls.crt
$cp/etc/letsencrypt/live/sub.example.com/privkey.pem/srv/docker/keydape/data/certs/tls.key
$chmod 755/srv/docker/Keyclope/data/certs/
$chmod 604/srv/docker/Keyclope/data/certs/*
docker-compose.yml
在我的例子中,我需要使用docker主机的主机网络。这不是最佳做法,您的案例不需要这样做。请在文档中找到有关配置参数的信息,网址为
启动容器
最后,我能够使用docker compose
启动我的软件
$cd/srv/docker/keydove/config/
$sudo docker组合up-d
我们可以看到容器中装载的证书
## open internal shell of keycloack container
$ sudo docker exec -it keycloak_app /bin/bash
## open directory of certificates
$ cd /etc/x509/https/
$ ll
-rw----r-- 1 root root 3586 Oct 30 14:21 tls.crt
-rw----r-- 1 root root 1708 Oct 30 14:20 tls.key
$cd/srv/docker/keydove/config/
$sudo docker组合up-d
我们可以双重检查容器中装载的证书
## open internal shell of keycloack container
$ sudo docker exec -it keycloak_app /bin/bash
## open directory of certificates
$ cd /etc/x509/https/
$ ll
-rw----r-- 1 root root 3586 Oct 30 14:21 tls.crt
-rw----r-- 1 root root 1708 Oct 30 14:20 tls.key
考虑到docker-compose.yml中的设置,任何试图使用受密码保护的私钥文件运行KeyClope的人都可以在上使用KeyClope: KeyClope运行脚本
/opt/jboss/tools/x509.sh
,根据/etc/x509/https
中提供的文件生成密钥库,如-设置TLS(SSL)中所述
不幸的是,这个脚本没有考虑密码短语。但在Docker构建时稍加修改,您就可以自己修复它:
在Dockerfile中添加:
RUN sed -i -e 's/-out "${KEYSTORES_STORAGE}\/${PKCS12_KEYSTORE_FILE}" \\/-out "${KEYSTORES_STORAGE}\/${PKCS12_KEYSTORE_FILE}" \\\n -passin pass:"${SERVER_KEYSTORE_PASSWORD}" \\/' /opt/jboss/tools/x509.sh
此命令修改脚本并附加
version: '3.7'
networks:
default:
external:
name: host
services:
keycloak:
container_name: keycloak_app
image: jboss/keycloak
depends_on:
- mariadb
restart: always
ports:
- "8080:8080"
- "8443:8443"
volumes:
- "/srv/docker/keycloak/data/certs/:/etc/x509/https" # map certificates to container
environment:
KEYCLOAK_USER: <user>
KEYCLOAK_PASSWORD: <pw>
KEYCLOAK_HTTP_PORT: 8080
KEYCLOAK_HTTPS_PORT: 8443
KEYCLOAK_HOSTNAME: sub.example.ocm
DB_VENDOR: mariadb
DB_ADDR: localhost
DB_USER: keycloak
DB_PASSWORD: <pw>
network_mode: host
mariadb:
container_name: keycloak_db
image: mariadb
volumes:
- "/srv/docker/keycloak/data/keycloak_db:/var/lib/mysql"
restart: always
environment:
MYSQL_ROOT_PASSWORD: <pw>
MYSQL_DATABASE: keycloak
MYSQL_USER: keycloak
MYSQL_PASSWORD: <pw>
network_mode: host
## open internal shell of keycloack container
$ sudo docker exec -it keycloak_app /bin/bash
## open directory of certificates
$ cd /etc/x509/https/
$ ll
-rw----r-- 1 root root 3586 Oct 30 14:21 tls.crt
-rw----r-- 1 root root 1708 Oct 30 14:20 tls.key
RUN sed -i -e 's/-out "${KEYSTORES_STORAGE}\/${PKCS12_KEYSTORE_FILE}" \\/-out "${KEYSTORES_STORAGE}\/${PKCS12_KEYSTORE_FILE}" \\\n -passin pass:"${SERVER_KEYSTORE_PASSWORD}" \\/' /opt/jboss/tools/x509.sh