/// <summary> /// Call back to override server certificate validation /// </summary> /// <param name="sender"></param> /// <param name="certificate"></param> /// <param name="chain"></param> /// <param name="sslPolicyErrors"></param> /// <returns></returns> internal bool ValidateServerCertificate( object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { //if user callback is registered then do it if (ServerCertificateValidationCallback != null) { var args = new CertificateValidationEventArgs { Certificate = certificate, Chain = chain, SslPolicyErrors = sslPolicyErrors }; Delegate[] invocationList = ServerCertificateValidationCallback.GetInvocationList(); Task[] handlerTasks = new Task[invocationList.Length]; for (int i = 0; i < invocationList.Length; i++) { handlerTasks[i] = ((Func <object, CertificateValidationEventArgs, Task>)invocationList[i])(null, args); } Task.WhenAll(handlerTasks).Wait(); return(args.IsValid); } if (sslPolicyErrors == SslPolicyErrors.None) { return(true); } //By default //do not allow this client to communicate with unauthenticated servers. return(false); }