忽略.Net Standard 2.0中的SSL证书

时间:2017-11-22 14:37:54

标签: c# .net ssl xamarin.forms .net-standard-2.0

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

  

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

     

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

     

at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
  在   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Net.Http.HttpHandlerToFilter.d__15.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   System.Net.Http.DiagnosticsHandler.d__2.MoveNext()   ---从抛出异常的先前位置开始的堆栈跟踪结束--- at   System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()at   System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务   任务)   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();

2 个答案:

答案 0 :(得分:1)

您可以在平台特定项目中编写此代码,例如主活动/应用代理:

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

答案 1 :(得分: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