使用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环境(对应你报错的技术栈):
- 双击导出的
keycloak.crt文件,选择「安装证书」 - 存储位置选择「本地计算机」,点击下一步
- 选择「将所有的证书都放入下列存储」,浏览选择「受信任的根证书颁发机构」,点击下一步完成安装
- 双击导出的
- Java环境:
执行命令导入到JDK默认信任库:keytool -import -alias keycloak -file keycloak.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
信任库默认密码为changeit
- .NET环境(对应你报错的技术栈):
- 第三步对齐域名:
要么修改本地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
相关产品推荐
相关产品推荐

