Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用docker映像的KeyClope SSL设置_Docker_Ssl_Keycloak_Keycloak Services - Fatal编程技术网

使用docker映像的KeyClope SSL设置

使用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)的文件夹,但我面临

我试图使用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的任何特定问题,但是,不确定如何让它工作。
感谢您提供的任何帮助

经过一些研究,以下方法奏效了(对于自签名证书,我仍然需要弄清楚如何使用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
  • 文件夹
    data/certs
    包含我通过letsencrypt生成的证书
  • 文件夹
    data/keycloack\u db
    映射到数据库容器以使其数据持久化
将证书文件放到正确的路径 当我第一次在使用原始的letscrypt证书进行KeyClope时遇到问题,我尝试了将证书转换为另一种格式的解决方法,正如前面答案的注释中所提到的,但也失败了。最后,我意识到我的问题是由对映射的证书文件设置的权限引起的

因此,对我有效的方法就是复制并重命名letsencrypt提供的文件,然后将它们装载到容器中

## 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