忽略.Net Standard 2.0中的SSL证书

问题描述 投票:4回答:2

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

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

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

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

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

ServicePointManager.ServiceCertificateValidationCallback += (o, c, ch, er) => true;

它适用于针对.Net framework 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();
c# .net ssl xamarin.forms .net-standard-2.0
2个回答
1
投票

您可以在主要活动/应用代表中的平台特定项目中编写此代码:

ServicePointManager.ServerCertificateValidationCallback +=
     (sender, cert, chain, sslPolicyErrors) => true;

0
投票

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

请参阅dotnet / corefx GitHub上的Add support for custom validation of server SSL Certificate to HttpClient APISystem.Net.Http 4.1 Contract Revisions

© www.soinside.com 2019 - 2024. All rights reserved.