我还遇到了
ERR_SSL_VERSION_OR_CIPHER_MISMATCH使用jboss / keycloak
Docker映像和letsencrypt提供的免费证书时出错的问题。即使考虑了其他评论的建议。现在,我有了一个有效的(并且非常简单)的设置,它可能也对您有所帮助。
1)生成letencrypt证书
首先,我
sub.example.com使用certbot
为域生成了letencrypt证书。你可以找到详细的说明和替代方法获得的证书https://certbot.eff.org/在和用户指南https://certbot.eff.org/docs/using.html。
$ sudo certbot certonly --standaloneSaving debug log to /var/log/letsencrypt/letsencrypt.logPlugins selected: Authenticator standalone, Installer NonePlease enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): sub.example.comObtaining a new certificatePerforming the following challenges:http-01 challenge for sub.example.comWaiting for verification...Cleaning up challengesimportANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/sub.example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/sub.example.com/privkey.pem Your cert will expire on 2020-01-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew"
2)准备docker-compose环境
我
docker-compose过去通过docker运行keycloak。配置和数据文件存储在path中
/srv/docker/keycloak/。
- 文件夹
config
包含docker-compose.yml
- 文件夹
data/certs
包含我通过letencrypt生成的证书 - 文件夹
data/keycloack_db
被映射到数据库容器以使其数据持久化。
将证书文件放在正确的路径
当我最初使用原始的letcrypt证书进行密钥隐藏时遇到问题时,我尝试了将证书转换为另一种格式的变通方法,如先前答案的注释中所述,该方法也失败了。最终,我意识到我的问题是由对映射的证书文件设置的权限引起的。
因此,对我有用的是仅复制并重命名letencrypt提供的文件 ,然后将它们安装到容器中。
$ cp /etc/letsencrypt/live/sub.example.com/fullchain.pem /srv/docker/keycloak/data/certs/tls.crt$ cp /etc/letsencrypt/live/sub.example.com/privkey.pem /srv/docker/keycloak/data/certs/tls.key$ chmod 755 /srv/docker/keycloak/data/certs/$ chmod 604 /srv/docker/keycloak/data/certs/*
docker-compose.yml
就我而言,我需要使用Docker主机的主机网络。这不是最佳做法,您的情况不应该这样做。请在hub.docker.com/r/jboss/keycloak/的文档中找到有关配置参数的信息。
version: '3.7'networks: default: external: name: hostservices: 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
最终目录设置
这就是我最终文件和文件夹设置的样子。
$ cd /srv/docker/keycloak/$ tree.├── config│ └── docker-compose.yml└── data ├── certs │ ├── tls.crt │ └── tls.key └── keycloak_db
启动容器
最后,我能够使用启动我的软件
docker-compose。
$ cd /srv/docker/keycloak/config/$ sudo docker-compose up -d
我们可以在容器中看到已安装的证书。
$ cd /srv/docker/keycloak/config/$ sudo docker-compose 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进行的设置,现在可以在https://sub.example.com:8443上使用keycloak



