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

Keycloak容器自动替换Certbot生成的证书,出现Cisco Umbrella证书导致连接不安全

Keycloak容器自动替换Certbot生成的证书,出现Cisco Umbrella证书导致连接不安全

看起来你遇到的问题大概率是网络层面的流量拦截加上Keycloak与Nginx的HTTPS配置冗余导致的,咱们一步步拆解解决:

先搞懂问题根源

Cisco Umbrella是企业级的安全网关,它会自动拦截HTTPS流量并替换证书(做中间人审计)。你提到证书会突然变成Umbrella的,说明有流量没有通过Nginx反向代理,而是直接访问了Keycloak容器的8443端口,被Umbrella拦截替换了证书。另外,你同时在Keycloak和Nginx上配置了HTTPS,这种冗余配置也容易出现不可控的问题。

解决方案:让Nginx全权处理SSL,Keycloak内部用HTTP

这是反向代理场景下的标准配置,既能避免证书冲突,也能彻底杜绝直接访问Keycloak端口的风险:

1. 修改Docker Compose的Keycloak配置

把Keycloak改成HTTP模式,同时开启反向代理适配:

version: "3.9"

services:
  keycloak:
    container_name: "keycloak"
    image: quay.io/keycloak/keycloak:22.0.3
    environment:
      KC_DB: mysql
      KC_DB_URL: jdbc:mysql://database_container:3306/keycloak
      KC_DB_USERNAME: username
      KC_DB_PASSWORD: password
      KEYCLOAK_ADMIN: kc_admin
      KEYCLOAK_ADMIN_PASSWORD: kc_admin_password
      KC_HOSTNAME: keycloak.hostname.com
      KC_PROXY: edge  # 告诉Keycloak它运行在反向代理之后
      KC_HTTP_PORT: 8080  # 启用HTTP端口
    ports:
      - "8080:8080"  # 只映射HTTP端口,移除8443
    # 移除证书挂载,因为Keycloak不再需要处理HTTPS
    command:
      start --proxy=edge --hostname-strict=true
    networks:
      - my_network

networks:
  my_network:
    name: my_network
    external: true

2. 调整Nginx配置

把反向代理的目标改成Keycloak的HTTP端口,同时添加必要的转发头,让Keycloak知道请求是通过HTTPS进来的:

server {
    server_name www.keycloak.hostname.com keycloak.hostname.com;

    location / {
        proxy_pass http://ip_address:8080/;  # 改成HTTP协议
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_buffer_size 256k;
        proxy_buffers 4 512k;
        proxy_busy_buffers_size 512k;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;  # 关键:告诉Keycloak请求是HTTPS的
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/keycloak.hostname.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/keycloak.hostname.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = www.keycloak.hostname.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = keycloak.hostname.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name www.keycloak.hostname.com keycloak.hostname.com;
    listen 80;
    return 404; # managed by Certbot
}

3. 加固网络访问规则

为了彻底防止流量绕过Nginx,建议在防火墙/安全组里设置:

  • 只允许Nginx所在的主机访问Keycloak的8080端口
  • 禁止外部直接访问Keycloak的任何端口

额外排查点

如果调整后还是出现问题,你可以:

  • 查看Keycloak容器的日志,确认有没有证书加载失败的报错(不过你的情况更可能是网络问题)
  • 联系公司的网络管理员,确认Cisco Umbrella是否把你的Keycloak域名加入了白名单,避免被拦截替换证书

备注:内容来源于stack exchange,提问作者Alessio Raddi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 13:24:33