ASP.NET Zero对接IdentityServer SSO时提示SSL证书已过期但实际未过期
问题可能的原因
- 混淆了HTTPS证书和JWT签名证书:你提到的有效期至2022年的是SSO站点HTTPS传输用的SSL证书,而报错指向的是Identity Server用来签名JWT令牌的X509证书,两者是完全独立的证书,大概率是签名用的证书实际已经过期。
- OpenID Connect发现文档缓存未更新:代码中使用的
IConfigurationManager<OpenIdConnectConfiguration>默认有24小时的缓存周期,如果Identity Server已经更换了新的有效签名证书,但应用还在使用缓存中拉取的旧过期证书校验令牌,就会触发该错误。可通过重启应用、清空配置缓存验证是否属于该问题。 - 服务器时间异常:校验证书有效期时依赖的是ASP.NET Zero应用所在服务器的UTC时间,如果服务器系统时间比实际时间快,超过了签名证书的
ValidTo时间,会触发误判。可以把报错日志里的ValidTo (UTC)和Current time (UTC)实际值取出对比,快速验证该问题。 - Identity Server侧配置错误:两种情况会触发该问题:一是Identity Server仍然在使用已过期的证书对JWT令牌签名;二是Identity Server的发现文档(.well-known/openid-configuration)返回的签名密钥列表中包含已过期的证书,且当前请求的令牌对应的kid正好匹配该过期证书。
- 类库版本Bug:部分旧版本的
Microsoft.IdentityModel.Tokens包存在证书有效期校验逻辑异常的问题,可尝试将该类库以及相关的System.IdentityModel.Tokens.Jwt包升级到最新稳定版验证是否解决。
临时应急方案(存在安全风险,不建议长期使用)
如果需要快速恢复业务,可在TokenValidationParameters配置中新增自定义校验逻辑跳过签名证书有效期校验:
validationParameters.IssuerSigningKeyValidator = (securityKey, securityToken, validationParameters) => { // 仅临时跳过证书有效期校验,排查完问题务必关闭 return true; };
内容的提问来源于stack exchange,提问作者ckeedee
相关产品推荐
相关产品推荐

