开启Fiddler时出现RemoteCertificateNameMismatch异常该如何解决?
解决Fiddler开启HTTPS解密后HttpClient报RemoteCertificateNameMismatch异常的方法
问题原因
Fiddler解密HTTPS流量时,会使用自身根证书重新签发目标站点的证书,若该签发证书的域名与原站点不匹配,就会触发HttpClient默认的证书验证逻辑,抛出RemoteCertificateNameMismatch异常。
以下是具体解决办法:
方案一:让HttpClient信任Fiddler根证书
- 导出Fiddler根证书:打开Fiddler,依次点击
Tools > Options > HTTPS > Actions > Export Root Certificate to Desktop,将证书保存到桌面(文件名为FiddlerRoot.cer)。 - 在代码中配置HttpClient信任该证书:
using System.Security.Cryptography.X509Certificates; using System.Net.Http; // 初始化HttpClientHandler并配置证书验证 var handler = new HttpClientHandler(); var fiddlerCert = new X509Certificate2(@"C:\Users\你的用户名\Desktop\FiddlerRoot.cer"); handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { // 信任Fiddler根证书签发的所有证书 return sslPolicyErrors == SslPolicyErrors.None || chain.ChainElements.Any(el => el.Certificate.Thumbprint == fiddlerCert.Thumbprint); }; var httpClient = new HttpClient(handler); // 使用该httpClient执行SendAsync请求
- 导出Fiddler根证书:打开Fiddler,依次点击
方案二:调整Fiddler证书生成配置
- 打开Fiddler的HTTPS高级设置:
Tools > Options > HTTPS > Advanced - 在弹出窗口中,勾选
Generate certificates for all hostnames (including intranet)选项,确保Fiddler能为所有域名生成匹配的证书 - 若配置后仍无效,点击窗口中的
Reset All Certificates按钮,重置并重新生成Fiddler证书,之后需重新信任该证书(按提示完成系统证书导入)
- 打开Fiddler的HTTPS高级设置:
方案三:开发环境临时关闭证书验证(仅限调试用)
若仅为开发调试,可临时跳过证书验证(禁止在生产环境使用):var handler = new HttpClientHandler(); // 忽略所有证书验证错误 handler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true; var httpClient = new HttpClient(handler);
内容的提问来源于stack exchange,提问作者O. H
相关产品推荐
相关产品推荐

