我正在创建一个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();
答案 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 API和System.Net.Http 4.1 Contract Revisions。