You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Keycloak Docker容器更新SSL证书后仍使用旧证书的问题

解决方案

核心原因

容器重启时,之前生成的旧https-keystore.jks会保留在容器内部文件系统中,启动脚本检测到已有keystore文件,就不会重新读取新挂载的证书生成新的keystore,导致仍然使用旧证书。

步骤1:清理旧容器并重新部署

这是最直接有效的方法:

  1. 停止并删除当前Keycloak容器:
    docker stop keycloak
    docker rm keycloak
    
  2. 用原命令重新创建容器(确保宿主机/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并重启:

  1. 进入容器,重新执行证书生成脚本:
    sudo docker exec -it keycloak /bin/bash
    cd /opt/jboss/tools/
    bash x509.sh
    
  2. 立即重启容器:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 10:25:39