javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。
我尝试连接中间件以集成 Web API 和 MAUI,但遇到了参考问题和运行时包丢失问题。
我期待 Web API 与 MAUI android 模拟器连接
将以下文件 (network_security_config.xml) 放入 Android 项目的 Resources/xml 目录中。
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system"/>
</trust-anchors>
</base-config>
</network-security-config>
允许明文流量:通过设置cleartextTrafficPermissed =“true”,您的应用程序可以发出未加密的HTTP请求。虽然对于开发很有用,但建议在生产时切换到 HTTPS 以确保数据安全。
Trust Anchors:带有 的部分表示您的应用程序信任系统预安装的 CA 证书。这并不直接解决信任自签名证书的问题,而是确保来自认可 CA 的证书受到信任。
要在 .NET MAUI Android 应用程序中使用此配置,您需要在 Android 清单文件 (AndroidManifest.xml) 中引用它,如下所示:
<application android:networkSecurityConfig="@xml/network_security_config">
...
</application>
在C#中实现IHttpHelper接口
IHttpHelper 接口及其实现 HttpHelper 允许您自定义应用程序处理 SSL 证书验证的方式。
public interface IHttpHelper
{
HttpClientHandler GetInsecureHandler();
}
public class HttpHelper : IHttpHelper
{
public HttpClientHandler GetInsecureHandler()
{
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) =>
{
if (cert.Issuer.Equals("CN=localhost"))
return true;
return errors == System.Net.Security.SslPolicyErrors.None;
};
return handler;
}
}
用法
var httpHelper = new HttpHelper();
var handler = httpHelper.GetInsecureHandler();
var httpClient = new HttpClient(handler);
另请注意:
尝试从 Android 模拟器访问本地开发服务器时使用的正确地址是 10.0.2.2。