代码调用REST API遇AuthenticationException:UntrustedRoot问题求助
问题分析与解决思路
你的异常和Basic Auth认证无关,核心原因是目标服务的SSL证书未被你的系统信任:Postman默认会自动跳过这类证书链校验错误,但.NET的HttpClient默认启用严格的证书验证规则,所以才会抛出UntrustedRoot异常。
以下是具体解决思路:
1. 临时方案(仅开发/测试环境)
如果是开发调试阶段,不想折腾证书导入,可以临时让HttpClient跳过证书校验(严禁用于生产环境,会带来严重安全风险):
修改HttpClient的初始化逻辑,添加自定义证书验证回调:
// 初始化HttpClient时配置Handler var handler = new HttpClientHandler(); // 强制信任所有证书(仅测试用) handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; var _client = new HttpClient(handler);
2. 正式环境推荐方案
情况A:目标服务用内部CA颁发的证书
把内部CA的根证书导入到本地机器的「受信任的根证书颁发机构」存储中:
- 打开「管理计算机证书」(可以通过运行
certlm.msc打开) - 找到「受信任的根证书颁发机构」→「证书」
- 右键导入根证书,按照向导完成操作
导入后,系统和.NET应用会自动信任该CA颁发的所有证书,无需修改代码。
情况B:目标服务用自签名证书
直接把该服务的证书导入到「受信任的根证书颁发机构」(不推荐长期使用,建议换成内部CA颁发的证书),步骤同上。
3. 代码优化建议
你当前用.Result阻塞异步方法,可能导致死锁问题,建议改成异步等待:
var httpResponse = await _client.GetAsync(Url);
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

