Apple device push notification receives error message Authentication failed because the remote side has closed the transport stream

I get the following error: "Authentication failed because the remote side has closed the transport stream"

after the ling code: stream.AuthenticateAsClient (this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false);

It is set to valid p.12

void connect() { client = new TcpClient(); //Notify we are connecting var eoc = this.OnConnecting; if (eoc != null) eoc(this.appleSettings.Host, this.appleSettings.Port); try { client.Connect(this.appleSettings.Host, this.appleSettings.Port); } catch (Exception ex) { throw new ConnectionFailureException("Connection to Host Failed", ex); } if (appleSettings.SkipSsl) { networkStream = client.GetStream(); } else { stream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback((sender, cert, chain, sslPolicyErrors) => { return true; }), new LocalCertificateSelectionCallback((sender, targetHost, localCerts, remoteCert, acceptableIssuers) => { return certificate; })); try { stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false); //stream.AuthenticateAsClient(this.appleSettings.Host); } catch (System.Security.Authentication.AuthenticationException ex) { throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex); } if (!stream.IsMutuallyAuthenticated) throw new ConnectionFailureException("SSL Stream Failed to Authenticate", null); if (!stream.CanWrite) throw new ConnectionFailureException("SSL Stream is not Writable", null); networkStream = stream; } //Start reading from the stream asynchronously Reader(); } } 
+5
source share
2 answers
 stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false); 

https://developer.apple.com/news/?id=10222014a

Apple push servers no longer support SSL3. Try changing this to .Default or .TLS and it should work.

+4
source

I used the Moon API for .NET and changed the Ssl3 protocol to Tls as above and use the .p12 file instead of the .pem .p12 created using passports.

$ openssl pkcs12 -export -in chatPushCert.pem -inkey chatPushKey.pem -certfile CertificateSigningRequest.certSigningRequest -name "apn_developer_identity" -out apn_developer_identity.p12

and all that works very well.

+1
source

Source: https://habr.com/ru/post/1206088/


All Articles