忽略 .Net Standard 2.0 中的 SSL 证书

Shu*_*thi 5 .net c# ssl xamarin.forms .net-standard-2.0

我正在其中创建一个 Xamarin 跨平台应用程序,我已将 Portable Class Library 替换为.Net Standard 2.0。从这个项目中,我们正在调用托管在 azure 服务结构集群上的 Web 服务(此服务使用自签名证书托管)。我在发出连接请求时收到以下错误 -

InnerException {System.Runtime.InteropServices.COMException (0x80072F0D):找不到与此错误代码关联的文本。

证书颁发机构无效或不正确

在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Net.Http.HttpHandlerToFilter.d__15.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Net.Http.DiagnosticsHandler.d__2.MoveNext() 处的 ExceptionServices.ExceptionDispatchInfo.Throw() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 - -- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Net.Http.HttpClientHandler.d__111.MoveNext()} System.Exception {System.Runtime .互操作服务。COM异常}

我认为导致问题的自签名 SSL,通常为了绕过证书,我们使用以下代码片段

ServicePointManager.ServiceCertificateValidationCallback += (o, c, ch, er) => true;
Run Code Online (Sandbox Code Playgroud)

它适用于面向 .Net 框架 4.6.1 的控制台应用程序,但此代码似乎不适用于 .Net Standard 2.0 和 .Net Core 2.0 应用程序。为了绕过 .Net Standard 和 .Net Core 应用程序中的证书,我们是否必须做一些不同的事情。以下是产生此错误的示例代码区域

IHubProxy _hub;
string url = @"https://www.xyz:com:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("MyHub");
connection.Start().Wait();
Run Code Online (Sandbox Code Playgroud)

des*_*dgc 1

ServicePointManager 在 .NET Core 中不可用,但您应该能够使用 System.Net.Http 4.1+ 使用 HttpClientHandler.ServerCertificateCustomValidationCallback 属性设置自定义委托。

请参阅dotnet/corefx GitHub 上的向 HttpClient API 添加对服务器 SSL 证书自定义验证的支持System.Net.Http 4.1 合同修订版