找不到证书路径的信任锚[Xamarin.Forms]

时间:2020-03-11 12:33:20

标签: c# xamarin xamarin.forms xamarin.android openvpn

当尝试使用 Open VPN

尝试 POST 到https API时遇到以下异常

注意::当我尝试在连接了Open VPN的平板电脑中使用swagger访问API时,该API可以正常运行并且只是移动应用无法使用它。 (在Xamarin应用中,我们得到了例外。

代码:

var uri = prepareLoginUri("/Login/Login");
var body = new { username, password };
var json = JsonConvert.SerializeObject(body);
var content = new StringContent(json, Encoding.UTF8, "application/json");

var response = await _client.PostAsync(uri, content);

例外:

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

找到了针对此异常的解决方案,但未能解决问题:

https://forums.xamarin.com/discussion/91782/trust-anchor-for-certification-path-not-found

根据此链接中的建议,我在 MainActivity.cs

中添加了以下代码
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
_client = new HttpClient(clientHandler);

这解决了异常,但是现在我从API获得的响应是​​ 404未找到

StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.HttpConnection+HttpConnectionResponseContent

但是大张旗鼓,该API绝对可以正常工作。

2 个答案:

答案 0 :(得分:0)

尝试将斜杠(/)放在BaseAddress的末尾,并且一定不要在相对URI的开头放置斜杠(/)。就像:

client.BaseAddress = new Uri("http://192.168.1.100:33435/ManageSystem/");
var response = await client.GetAsync("Login/Login");

答案 1 :(得分:0)

解决方案

我们需要一个SSL证书,但是即使添加了一个SSL证书,我们仍然存在此问题, 这与移动应用程序无关,问题在于SSL证书 我们没有正确配置证书,我们必须添加中间 证书生成HA代理的.pem文件。

该网站将我们的重点从移动应用转移到了服务器。 https://www.digicert.com/help/

它清楚地表明问题出在服务器上,以下是链接 这帮助我解决了这个问题。

Trust Anchor not found for Android SSL Connection