Keycloak Docker容器更新SSL证书后仍使用旧证书的问题
解决方案
核心原因
容器重启时,之前生成的旧https-keystore.jks会保留在容器内部文件系统中,启动脚本检测到已有keystore文件,就不会重新读取新挂载的证书生成新的keystore,导致仍然使用旧证书。
步骤1:清理旧容器并重新部署
这是最直接有效的方法:
- 停止并删除当前Keycloak容器:
docker stop keycloak docker rm keycloak - 用原命令重新创建容器(确保宿主机
/home/cert下的新证书已正确放置):docker run -d --name keycloak --net keycloak-network -p 8443:8443 \ -e KEYCLOAK_USER=******* -e KEYCLOAK_PASSWORD=******** \ --mount type=bind,source=/home/cert/keycloak.key,target=/etc/x509/https/tls.key \ --mount type=bind,source=/home/cert/keycloak.crt,target=/etc/x509/https/tls.crt \ jboss/keycloak
容器启动时会自动读取新证书,重新生成正确的keystore。
步骤2:(可选)无需删除容器的修复方法
如果不想删除容器,可以手动替换容器内的keystore并重启:
- 进入容器,重新执行证书生成脚本:
sudo docker exec -it keycloak /bin/bash cd /opt/jboss/tools/ bash x509.sh - 立即重启容器:
docker restart keycloak
注意:这种方法可能因为容器内部文件系统的缓存问题失效,优先推荐步骤1。
额外检查项
- 确认宿主机
/home/cert下的keycloak.key和keycloak.crt是新的有效证书,可以用以下命令验证:openssl x509 -in /home/cert/keycloak.crt -text -noout | grep "Not After" - 检查证书文件的权限,确保容器内的
jboss用户能读取:sudo chmod 644 /home/cert/keycloak.key /home/cert/keycloak.crt sudo chown 1000:1000 /home/cert/keycloak.key /home/cert/keycloak.crt - 清除浏览器缓存或使用隐私模式访问,排除浏览器缓存旧证书的干扰。
内容的提问来源于stack exchange,提问作者Norman Hacker
相关产品推荐
相关产品推荐

