【发布时间】:2019-02-15 18:40:43
【问题描述】:
我正在尝试对具有 2 个 SSL 证书的站点进行 HTTPS 调用:一个自签名证书和一个由第一个证书签名的证书。当我使用 HttpClient 向站点发送请求时,控制台会记录一个不受信任的链,显示两个证书,然后打印由 java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 引起的长堆栈跟踪。
我已在我的手机上安装了这两个证书,并且将 Chrome 导航到该站点显示一个受信任的连接(在我安装证书之前它有一个不受信任的连接警告)。我认为问题在于应用程序拒绝信任自签名证书。我无权访问服务器,因此对其证书没有影响,因此安装由受信任的 CA 签名的证书是不可行的。
我尝试过但没有奏效的解决方案。
ServicePointManager.ServerCertificateValidationCallback 似乎没有运行。
我尝试使用我自己的函数来处理ServicePointManager.ServerCertificateValidationCallback,但我给它的委托似乎从未运行。我的 MainActivity.OnCreate 方法中有以下代码,但控制台从不记录消息:
System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
{
Console.WriteLine($"****************************************************************************************************");
return true;
};
HttpClientHandler.ServerCertificateCustomValidationCallback 抛出异常。
我曾尝试使用HttpClientHandler 并设置它的ServerCertificateCustomValidationCallback,但我只是收到消息:
System.NotImplementedException: The method or operation is not implemented. at System.Net.Http.HttpClientHandler.set_ServerCertificateCustomValidationCallback (System.Func`5[T1,T2,T3,T4,TResult] value).
设置代码:
HttpClientHandler handler = new HttpClientHandler();
handler.ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true;
HttpClient client = new HttpClient(handler);
【问题讨论】:
-
您使用的是托管提供程序还是 AndroidClientHandler 和/或哪个 SSL/TLS:BoringSSL 或托管?
-
我只是使用带有默认设置的常规
HttpClient(除非我尝试使用 HttpClientHandler)。 -
我正在寻找项目的 Android 构建设置(项目选项/构建/Android 构建/常规选项卡),如果您仍然可以使用托管提供程序,请使用 AndroidClientHandler 和 clean/rebuild/重新测试
-
HttpClient 实现:Android。 SSL/TLS 实施:本机 TLS 1.2+。我将 HttpClient 实现更改为 Managed,当我尝试调用时得到异常
System.Net.WebException: Unable to read data from the transport connection: Connection reset by peer.。 -
还有 SSL/TLS 设置?
标签: android ssl xamarin httpclient