Ошибка сертификата iPhone в apns sharp. Сбой вызова SSPI - PullRequest
7 голосов
/ 15 июля 2011

У меня есть служба данных, размещенная в Azure, с которой я отправляю уведомление на iphone, но при установлении соединения с apns я получаю следующую ошибку «Сбой вызова SSPI. Полученное сообщение было неожиданным или неправильно отформатированным». я также ссылался на следующие ссылки на ту же ошибку, но все еще получаю ошибку

яблочное пуш-уведомление с резким APNS и C # iPhone push-сервер?

        try
        {
            using (TcpClient client = new TcpClient())
            {

                try
                {
                    client.Connect("gateway.sandbox.push.apple.com", 2195);
                    Logging("TSSLProDi :Connected to Apple");
                }
                catch (Exception ex)
                {
                    Logging("TSSLProDi :" + ex.Message + "-IE-" + ex.InnerException);

                }
                using (NetworkStream networkStream = client.GetStream())
                {
                    Logging("TSSLProDi :Client connected.");

                    X509Certificate clientCertificate = new X509Certificate(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory + @"startup\certname.pfx"), "mycertpassword");
                    X509CertificateCollection clientCertificateCollection = new X509CertificateCollection(new X509Certificate[1] { clientCertificate });

                    // Create an SSL stream that will close the client's stream.
                    SslStream sslStream = new SslStream(
                        client.GetStream(),
                        false,
                        new RemoteCertificateValidationCallback(validateServerCertificate),
                        null
                        );

                    try
                    {
                        sslStream.AuthenticateAsClient("gateway.sandbox.push.apple.com", clientCertificateCollection, System.Security.Authentication.SslProtocols.Default, false);
                        Logging("TSSLProDi :slStreamAuthenticated");
                    }
                    catch (AuthenticationException ex)
                    {
                        Logging("TSSLProDi :" + "Exception: " + ex.Message.ToString());
                        if (ex.InnerException != null)
                        {
                            Logging("Inner exception: " + ex.InnerException.Message.ToString());
                        }
                        Logging("TSSLProDi :" + "Authentication failed - closing the connection.");
                        client.Close();
                        return;
                    }
                }

            }
        }
        catch (Exception ex)
        {

            Logging("TSSLProCert :" + ex.Message + "-IE-" + ex.InnerException);
        }

Я также установил необходимые сертификаты на ВМ. одно предупреждение, которое я получаю в сертификате iphone developer_identity, которое я получил от apple, заключается в том, что «в Windows недостаточно информации для проверки этого сертификата» что-то не так с моим сертификатом iphone. Пожалуйста, помогите мне, я застрял

Ответы [ 6 ]

6 голосов
/ 19 июля 2011

получил решение, которое я только что изменил X509Certificate2 на X509Certificate2 и X509CertificateCollection на X509Certificate2Collection

3 голосов
/ 14 октября 2014

Не знаю, будет ли это полезно через 3 года, но я оставляю ответ для iOS8.

Apple изменила безопасность сервера, и прямо в строке, которую вы упоминаете, вы должны перейти с SSL на TLS:

Оригинальный код:

_apnsStream.AuthenticateAsClient(host,certificates,System.Security.Authentication.SslProtocols.Ssl3, false); 

Новый код:

_apnsStream.AuthenticateAsClient(host,certificates,System.Security.Authentication.SslProtocols.Tls, false);

Надеюсь, эта информация кому-нибудь пригодится.

Кто-то прокомментировал это на форуме GIT

3 голосов
/ 18 июля 2011

Я предлагаю вам выполнить действия, описанные в этом руководстве, чтобы создать файл p12 из сертификата разработчика.

http://help.adobe.com/en_US/as3/iphone/WS144092a96ffef7cc-371badff126abc17b1f-7fff.html

Также важно, чтобы вы зарегистрировали этот файл в Windows. Это так же просто, как двойной щелчок по файлу после его создания. Не забудьте обновить вызов конструктора X509Certificate впоследствии.

Учебник одинаково хорошо работает на Windows, но вам, возможно, придется скачать клиент OpenSSL, который можно найти здесь:

http://gnuwin32.sourceforge.net/packages/openssl.htm.

1 голос
/ 17 января 2013

У меня та же проблема, я использую файл сертификата .p12 вместо .pfx и использую moon-apns для отправки уведомлений, проблема решена.

Donwnload Moon-APNS code here: https://github.com/arashnorouzi/Moon-APNS

1 голос
/ 08 августа 2012

Немного поздно, но кто знает, поможет ли это кому-нибудь ... Я сделал большую ошибку с сертификатом и установил .CER, который я скачал с сайта разработчиков Apple ... Я знаю ... моя вина, но это могло случится, если ты такой же тупой, как и я: -P

Когда вы загружаете .CER, вы должны импортировать его в цепочку для ключей, а затем экспортировать сертификат, включающий в себя закрытый ключ ..., который сгенерирует сертификат .P12, и это тот, который вы должны установить в Windows машина. После того, как я установил .P12 в LocalMachine / Personal store, аутентификация для меня работала нормально.

0 голосов
/ 18 июля 2011

Попробуйте это:

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