【问题标题】:Ignore SSL certificate in .Net Standard 2.0忽略 .Net Standard 2.0 中的 SSL 证书
【发布时间】:2018-05-06 08:21:48
【问题描述】:

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

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

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

在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Net.Http.HttpHandlerToFilter.d__15.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Net.Http.DiagnosticsHandler.d__2.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Net.Http.HttpClientHandler.d__111.MoveNext()} System.Exception {System.Runtime.InteropServices.COMException}

我认为是自签名 SSL 导致问题,一般为了绕过证书我们使用以下代码 sn -p

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

它适用于面向 .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();

【问题讨论】:

  • 我不得不重复一遍,但这不是this question 的转贴,尽管根本问题可能相同。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以简单地在您的平台特定项目中编写此代码,例如在 Main Activity / App Delegate 中:

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

    【讨论】:

    • 使用 netstandard2 Xamarin.Forms 项目完美地为 Xamarin.Android 工作!谢谢。注意。您应该将其添加到 MainActivity.OnCreate()
    • 不适用于 Xamarin.Forms 3.2.0.839982 尝试使用 ASP.NET Core 2.1 连接安全 API
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    • 2013-10-31
    • 1970-01-01
    相关资源
    最近更新 更多