Аутентификация APNS SSIStream не удалась, так как удаленная сторона закрыла транспортный поток

Я пытаюсь отправить уведомление на iphone, используя asp.net, С#. Я получаю следующую ошибку «Аутентификация не удалась, поскольку удаленная сторона закрыла транспортный поток» в этой строке кода.

sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Ssl3, false);

может ли кто-нибудь помочь мне в этом.

Заранее спасибо.


person Kodee    schedule 07.01.2011    source источник


Ответы (6)


вы можете попробовать, изменив X509Certificate на X509Certificate2 и X509CertificateCollection на X509Certificate2Collection.

person Rahul Parate    schedule 19.07.2011

Недавно я также получил сообщение об ошибке: "Ошибка вызова SSPI. Полученное сообщение было неожиданным или неправильно отформатировано." с внутренним исключением: "Аутентификация не удалась, поскольку удаленная сторона закрыла транспортный поток"

Что мне помогло, так это немного изменить метод OpenSslStream - TSL в протоколе SSL.

старый код:

apnsStream.AuthenticateAsClient(
    this.Host, this.certificates, 
    System.Security.Authentication.SslProtocols.Ssl3, 
    false
);

новый код:

apnsStream.AuthenticateAsClient(
    this.Host, this.certificates, 
    System.Security.Authentication.SslProtocols.Ssl3 | System.Security.Authentication.SslProtocols.Tls,
    false
);

Надеюсь, это поможет кому-то...

person Arkady    schedule 18.10.2014
comment
Была такая же проблема. В моем случае проблема была устранена только после применения обоих решений X509Certificate -> X509Certificate2, X509CertificateCollection к X509Certificate2Collection и добавления флага SslProtocols.Tls. Итак, оба ответа верны и оба необходимы для решения темы. - person Madman; 24.11.2014

Лично я использую это:

sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SslProtocols.Default, false);

            using (TcpClient client = new TcpClient())
            {


                client.Connect("gateway.sandbox.push.apple.com", 2195);


                using (NetworkStream networkStream = client.GetStream())
                {
                    try
                    {

                        SslStream sslStream = new SslStream(client.GetStream(), false);


                        try
                        {
                            sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", "gateway.sandbox.push.apple.com", SslProtocols.Default, false);
                          //building messages
                          sslStream.Write(msg);
                          sslStream.close();
person malinois    schedule 10.01.2011
comment
Спасибо малинуа. Я проверил вашу строку кода, но она возвращает ту же ошибку. Не могли бы вы опубликовать код и шаги для этого APNS с использованием C #. Заранее спасибо. Ваша помощь очень ценится. - person Kodee; 11.01.2011

Я думаю, что проблема здесь в том, что вы преобразовали сертификат из Apple в сертификат при разработке сервера, вы можете использовать следующую команду в openssl для этого:

  • command1: openssl x509 -in "apn_developer_identity.cer" -inform DER -out "apn_developer_identity.pem" -outform PEM
  • command2: openssl pkcs12 -nocerts -in "pushkey1.p12" -out "pushkey1.pem" -passin pass:yourpass -passout pass:yourpass
  • command3: openssl pkcs12 -export -inkey "pushkey1.pem" -in "apn_developer_identity.pem" -out "apn_developer_identity.p12" -passin pass: yourpass -passout pass: yourpass
person Le Thanh Lam    schedule 27.07.2015

Попробуйте приведенный ниже код sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls, false);

person Wadhawan Vishal    schedule 28.04.2016

Попробуйте создать сертификат только с закрытым ключом.

person Wadhawan Vishal    schedule 05.10.2016