Ошибка сертификата iPhone в apns sharp. Сбой вызова SSPI

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

пуш-уведомления Apple с APNS Sharp и C# iPhone пуш-сервер?

        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 ответов

Решение

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

Я не знаю, будет ли это полезно через 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

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

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

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

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

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

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

Загрузите код Moon-APNS здесь: https://github.com/arashnorouzi/Moon-APNS

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

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

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

SslStream sslStream = new SslStream(client.GetStream(), false);
Другие вопросы по тегам