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

使用Keycloak OpenID Connect获取配置失败 SSL证书验证错误问询

问题根因

该报错的核心原因是Keycloak默认使用自签名SSL证书提供HTTPS服务,该证书不在应用运行环境的受信任根证书列表中,导致SSL握手阶段证书校验失败,无法拉取OpenID Connect配置。同时你提供的JWT中iss字段值为https://default-host:8443/auth/realms/Smf-Portal,如果请求Keycloak时使用的域名与证书绑定域名不一致,也会触发校验失败。

修复方案

方案1:生产环境推荐 - 导入Keycloak证书到信任库

  • 第一步导出Keycloak的自签名证书:
    本地安装openssl工具后执行命令:
    openssl s_client -connect localhost:8443 < /dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > keycloak.crt
  • 第二步导入证书到信任库(根据你的技术栈选择):
    • .NET环境(对应你报错的技术栈):
      1. 双击导出的keycloak.crt文件,选择「安装证书」
      2. 存储位置选择「本地计算机」,点击下一步
      3. 选择「将所有的证书都放入下列存储」,浏览选择「受信任的根证书颁发机构」,点击下一步完成安装
    • Java环境:
      执行命令导入到JDK默认信任库:
      keytool -import -alias keycloak -file keycloak.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
      信任库默认密码为changeit
  • 第三步对齐域名:
    要么修改本地hosts文件添加127.0.0.1 default-host映射,要么修改Keycloak服务的hostname配置为localhost,保证请求Keycloak的域名与证书、JWT中iss字段的域名一致。

方案2:开发环境临时方案(禁止生产环境使用)

  • 方案A:跳过SSL证书校验
    .NET 6+ 配置JWT认证时添加跳过逻辑:
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.RequireHttpsMetadata = false;
            // 跳过后端请求Keycloak的证书校验
            options.BackchannelHttpHandler = new HttpClientHandler
            {
                ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true
            };
            // 保留你原本的Authority、Audience等配置
        });
    
  • 方案B:直接使用HTTP端口避开HTTPS校验
    开发阶段直接将JWT认证的Authority配置修改为Keycloak默认HTTP端口地址:http://localhost:8080/auth/realms/Smf-Portal,无需处理证书即可正常拉取配置。

验证

配置完成后重启应用,即可正常拉取OpenID Connect配置,完成JWT令牌校验。


内容的提问来源于stack exchange,提问作者Priyanka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:27:03