我使用自签名证书并尝试通过https连接到本地服务器。这是我的代码:
在PCL:
using (HttpClient client = new HttpClient(new ModernHttpClient.NativeMessageHandler(false, true) { ClientCertificateOptions = ClientCertificateOption.Manual, }, false))
{
text = await client.GetStringAsync(address);
}
机器人:
ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, errors) => certificate.GetCertHashString() == "abc123";
永远不会调用回调。当与客户端进行GET时,它会抛出一个异常,该异常为null并且不给我任何信息。这在日志中显示我认为是正常的:
12-08 08:40:43.175 D / NetworkSecurityConfig(5796):未使用平台默认值指定网络安全配置
我使用nougat在我的谷歌像素xl上部署应用程序。我尝试使用6.0版的模拟器,没有运气。我明白了:
12-08 08:50:42.137 D /(1428):HostConnection :: get()建立新主机连接0x99f44ac0,tid 1457 12-08 08:50:42.149 I / OpenGLRenderer(1428):初始化的EGL,版本1.4 12-08 08:50:42.199 W / EGL_emulation(1428):eglSurfaceAttrib未实现 12-08 08:50:42.199 W / OpenGLRenderer(1428):无法在表面0x9b868b60上设置EGL_SWAP_BEHAVIOR,错误= EGL_SUCCESS 12-08 08:50:42.557 D / Mono(1428):DllImport搜索:' __内部' ('(空)&#39)。
这两个设备在GET的同一个地方崩溃。 上面的代码在我的wpf客户端上工作正常。 android有一些我需要设置的特殊标志吗?
日志文件:http://pastebin.com/r3sAvkn6 http://pastebin.com/3GPf7Dqc
答案 0 :(得分:0)
尝试以下操作。
System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate (object ob, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
using (var httpClient = new HttpClient(new NativeMessageHandler()))
{
var tt = await httpClient.GetAsync(uri);
string tx = await tt.Content.ReadAsStringAsync();
//Log.Info(TAG, tx);
}
答案 1 :(得分:0)
问题是NativeMessageHandler。不知怎的,当我切换回HttpClientHandler时,它开始工作了。