Ubuntu下Dotnet 6项目间调用出现SSL连接错误排查
Ubuntu下Dotnet 6项目间HTTPS调用的UntrustedRoot证书问题解决
根本原因
dotnet dev-certs生成的localhost开发证书默认仅在当前用户的Dotnet私有存储中可信,而Ubuntu系统全局CA存储或Dotnet运行时的信任链未包含该证书。第三方脚本通常仅配置了浏览器的证书信任,未覆盖Dotnet项目间调用的信任需求,导致证书链验证失败。
修复步骤
1. 导出并导入证书到系统CA存储
# 导出开发证书为PEM格式 dotnet dev-certs https --export-path ~/localhost-dev-cert.pem --format PEM --no-password # 将证书复制到系统CA目录 sudo cp ~/localhost-dev-cert.pem /usr/local/share/ca-certificates/localhost-dev-cert.crt # 更新系统证书信任 sudo update-ca-certificates
2. 让Dotnet运行时信任该证书
执行命令完成Dotnet侧的证书信任配置:
dotnet dev-certs https --trust
无图形界面环境下,手动导入到Dotnet全局根存储:
sudo mkdir -p /usr/share/dotnet/corefx/cryptography/x509stores/root/ sudo cp ~/localhost-dev-cert.pem /usr/share/dotnet/corefx/cryptography/x509stores/root/localhost-dev-cert.crt
3. 验证与测试
- 重新运行
dotnet dev-certs https --check确认证书状态正常 - 重启UI和API项目,测试跨项目HTTPS调用
4. 检查运行用户上下文
若UI项目以非当前用户(如www-data)运行,需确保该用户能访问系统CA目录下的证书。导入到全局CA目录后,此问题通常自动解决。
关于代码绕过无效的说明
如果自定义HttpClientHandler未正确注册到DI容器,或项目使用了默认HttpClient实例,会导致绕过SSL校验的代码不生效。但优先修复证书信任的根本问题,比代码绕过更符合开发规范。
内容的提问来源于stack exchange,提问作者dan178
相关产品推荐
相关产品推荐

