问题描述
我有一个带 PCL 的 Xamarin 应用程序,我目前正在使用 Android 进行开发/调试。在我的应用程序中,我无法将 System.Net.WebSockets.ClientWebSocket 连接到我的 WebsocketServer (Azure),因为服务器使用自签名证书。它因 noSwipingClass
: System.Net.WebSockets.WebSocketException
和内部异常 Unable to connect to Remote Server
而失败。
这就是我目前所期望的。因此,我尝试通过始终在验证回调中返回 true 来绕过证书验证(用于开发目的):Ssl error:1000007d:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_Failed
不幸的是,此回调从未在 Android 中调用,因此我尝试将证书存储在当前用户证书存储中:
ServicePointManager.ServerCertificateValidationCallback += (sender,cert,chain,sslPolicyErrors) => true;
但这也没有用。将证书添加到 WebsocketClient.Options.ClientCertificates 也不起作用。
另请参阅 this SO question,尤其是尝试 2、3 和 4,它描述了相同的问题,并且我从那里得到了将证书添加到用户证书存储的想法。
有人知道如何通过 Xamarin 连接到使用自签名证书的 WebsocketServer 吗? 我正在加载证书作为资源(有效)。 Xamarin PCL 项目使用 .NET 标准 2.1,而 Android 项目使用 Android 9.0 - API 级别 28。Visual Studio 2019 版本 16.8.5
var data = new byte[stream.Length];
stream.Read(data,data.Length);
x509 = new X509Certificate2(data);
X509Store store = new X509Store(StoreName.Root,StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
var certs = store.Certificates.Find(X509FindType.FindByThumbprint,x509.Thumbprint,false);
if (certs.Count == 0)
store.Add(x509);
store.Close();
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)