Problema en la notificación Push IOS: la authentication falló porque la parte remota ha cerrado la transmisión

Estoy usando el siguiente código para notifications push.

public void PushNotificationIOS(string message, string registrationKey) { string deviceID = registrationKey; int port = 2195; String hostname = System.Configuration.ConfigurationManager.AppSettings["HostName"];//"gateway.sandbox.push.apple.com"; string certPath = string.Empty; certPath = System.Configuration.ConfigurationManager.AppSettings["CertificatePath"] + System.Configuration.ConfigurationManager.AppSettings["Cer String certificatePath = System.Web.HttpContext.Current.Server.MapPath(certPath); string certPassword = System.Configuration.ConfigurationManager.AppSettings["CertificatePassword"]; TcpClient client = new TcpClient(hostname, port); try { X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(certificatePath), certPassword); X509Certificate2Collection certificatesCollection = new X509Certificate2Collection(clientCertificate); SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null); sslStream.AuthenticateAsClient(hostname, certificatesCollection, SslProtocols.Tls, false); MemoryStream memoryStream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(memoryStream); writer.Write((byte)0); writer.Write((byte)0); writer.Write((byte)32); writer.Write(StringToByteArray(deviceID.ToUpper())); String payload = "{\"aps\":{\"alert\":\"" + message + "\",\"badge\":0,\"sound\":\"default\"}}"; writer.Write((byte)0); writer.Write((byte)payload.Length); byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload); writer.Write(b1); writer.Flush(); byte[] array = memoryStream.ToArray(); sslStream.Write(array); sslStream.Flush(); client.Close(); } catch (System.Security.Authentication.AuthenticationException ex) { client.Close(); } } 

Estoy recibiendo el siguiente error: la authentication falló porque la parte remota ha cerrado el flujo de transporte. En Trace, estoy obteniendo el siguiente

 System.Net.Security.SslState.CheckThrow(Boolean authSucessCheck) at System.Net.Security.SslState.get_SecureStream() at System.Net.Security.SslStream.Write(Byte[] buffer) 

Probé todas las cosas mencionadas en varias publicaciones, pero no puedo resolver el problema.

Asegúrese de que el certificate sea válido y no esté dañado. Puede regenerar el certificate para estar seguro.

Intente proporcionar todas las opciones para SecurityProtocolType como:

 sslStream.AuthenticateAsClient(hostname, certificatesCollection, SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls, false); 

SecurityProtocolType.Tls12 puede negociar la security de la capa de transporte 1.1 o hacia abajo también, pero testing todas las opciones para estar seguro.

introduzca la descripción de la imagen aquí

Para más detalles sobre SecurityProtocolType consulte:

https://msdn.microsoft.com/en-us/library/system.net.securityprotocoltype(v=vs.110).aspx