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

.NET MAUI安卓应用Hostname未验证SSL错误求助

.NET MAUI安卓端SSL请求错误修复方案

核心问题:未关联自定义Handler到HttpClient

你创建了AndroidClientHandler并配置了SSL验证回调,但没有将该Handler传入HttpClient的构造函数,导致所有SSL相关配置完全未生效,这是问题的关键。

修复步骤

1. 修正HttpClient初始化代码

确保HttpClient使用你配置好的Handler,修改后的代码如下:

var json = Newtonsoft.Json.JsonConvert.SerializeObject(user);
var data = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");
var url = "你的请求URL"; 

// 配置自定义Handler
HttpClientHandler handler = new Xamarin.Android.Net.AndroidClientHandler();
handler.ServerCertificateCustomValidationCallback += (sender, cert, chain, sslPolicyErrors) => 
{ 
    // 仅测试环境使用,生产环境请替换为真实证书验证逻辑
    return true; 
};

// 关键:将Handler传入HttpClient构造函数
var client = new HttpClient(handler);

// 配置安全协议(需在HttpClient创建前设置)
ServicePointManager.CheckCertificateRevocationList = false;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
ServicePointManager.SecurityProtocol &= ~SecurityProtocolType.Ssl3;

var response = await client.PostAsync(url, data);
response.EnsureSuccessStatusCode();

var responseBody = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
var responseobj = JsonConvert.DeserializeObject<responsecls>(responseBody);

2. 安卓端网络安全性补充配置(针对Android 10+)

如果是使用自签名证书或内部CA证书,还需在安卓项目中配置网络安全策略:

  • 在安卓项目的Resources/xml目录下创建network_security_config.xml文件,内容如下(测试环境允许所有证书,生产环境请替换为具体证书配置):
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <!-- 若需信任用户安装的证书,添加下面一行 -->
            <!-- <certificates src="user" /> -->
            <!-- 若需信任特定自签名证书,添加下面一行并指定证书路径 -->
            <!-- <certificates src="@raw/your_cert_file" /> -->
        </trust-anchors>
    </base-config>
</network-security-config>
  • 在AndroidManifest.xml的<application>标签中添加配置:
<application ... android:networkSecurityConfig="@xml/network_security_config">

3. 生产环境注意事项

  • 禁止使用return true完全绕过SSL验证,这会导致严重安全风险。
  • 正确的做法是将服务器的CA证书或自签名证书打包到安卓项目中,通过network_security_config.xml指定信任该证书。

内容的提问来源于stack exchange,提问作者Asım

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 14:18:17