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

使用WSL与Identity Server 4时遭遇SSL证书验证错误

解决WSL环境下Identity Server与MVC客户端的证书验证错误

问题背景

开发了基于Entity Framework存储用户凭证的Identity Server应用,以及集成OpenID认证的ASP.NET Core MVC客户端。本地Windows环境运行正常,但以WSL(Ubuntu 20.04)作为Visual Studio调试目标时,客户端登录出现错误:

AuthenticationException: The remote certificate is invalid according to the validation procedure.

已在WSL中安装.NET、生成开发者证书,单独访问Identity Server正常,但客户端跳转认证时失败。

核心原因

WSL与Windows的网络环境、证书信任机制存在差异,即使生成了开发者证书,也可能出现跨环境证书不被信任,或localhost地址解析导致的验证失败。

解决步骤

1. 重新生成并信任WSL的开发者证书

在WSL终端执行以下命令,清理旧证书并生成信任新的HTTPS证书:

dotnet dev-certs https --clean
dotnet dev-certs https --trust

执行--trust时会触发Windows的证书信任弹窗,务必确认信任该证书。

2. 用WSL的IP地址替代localhost

WSL与Windows的localhost互通存在兼容性问题,建议直接使用WSL的IP配置服务地址:

  • 执行hostname -I在WSL终端获取本机IP(格式如192.168.x.x)
  • 修改Identity Server的客户端配置:
    new Client
    {
        // 其他配置保持不变
        RedirectUris = { "https://[你的WSL_IP]:5000/signin-oidc" }
    }
    
  • 修改MVC客户端的OpenID配置:
    .AddOpenIdConnect("oidc", config =>
    {
        config.Authority = "https://[你的WSL_IP]:5001/";
        // 其他配置保持不变
    })
    
    同时确保两个项目的launchSettings.json中,applicationUrl包含WSL的IP(例如:https://[WSL_IP]:5001;https://localhost:5001)

3. 临时禁用HTTPS元数据验证(仅开发环境)

如果上述方法未生效,可临时关闭HTTPS元数据验证(生产环境严禁使用),取消客户端配置中对应代码的注释:

config.RequireHttpsMetadata = false;

4. 手动导入Windows证书到WSL信任存储

若WSL无法自动信任Windows的开发者证书,可手动导入:

  1. 在Windows中打开certmgr.msc,依次展开「个人」→「证书」,找到localhost的开发者证书,右键导出为Base64编码的.cer文件
  2. 将.cer文件复制到WSL的/usr/local/share/ca-certificates/目录
  3. 在WSL终端执行更新证书命令:
    sudo update-ca-certificates
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:50:25