apns sharp中的iPhone证书错误对SSPI的调用失败

时间:2011-07-15 13:02:46

标签: iphone azure apple-push-notifications apns-sharp

我有一个托管在azure的数据服务,我正在向iphone发送通知但是在与apns建立连接时我收到了以下错误 “对SSPI的呼叫失败。收到的消息是意外的或格式错误。”我也提到了相同错误的链接,但仍然收到错误

apple push notification with APNS sharpC# iPhone push server?

        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);
        }

我也在VM上安装了所需的证书。 我从苹果获得的iphone developer_identity证书上发出的一个警告是“Windows没有足够的信息来验证此证书”我的iphone证书有问题。请帮助我,我被困住了

6 个答案:

答案 0 :(得分:6)

得到的解决方案我刚刚将X509Certificate更改为X509Certificate2而X509CertificateCollection更改为X509Certificate2Collection

答案 1 :(得分:3)

我建议您按照本教程中的步骤从您的开发人员证书创建一个p12文件。

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

在Windows中注册此文件也很重要。这就像生成文件后双击文件一样简单。不要忘记之后更新对X509Certificate构造函数的调用。

本教程在Windows上同样运行良好,但您可能需要下载可在此处找到的OpenSSL客户端:

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

答案 2 :(得分:3)

我不知道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 :(得分:1)

不是很晚,但谁知道它是否对某人有帮助......我在证书上犯了一个大错,并安装了我从Apple Developer Site下载的.CER ...我知道......我的错,但它可以如果你和我一样愚蠢的话会发生:-P

当您下载.CER时,您必须将其导入您的钥匙串,然后导出证书,包括将生成.P12证书的私钥...,这是您必须在Windows中安装的证书机。一旦我将.P12安装在LocalMachine / Personal商店中,身份验证就可以正常使用。

答案 4 :(得分:1)

我遇到同样的问题,我使用.p12证书文件而不是.pfx并使用moon-apns发送通知,问题解决了。

Donwnload Moon-APNS代码:https://github.com/arashnorouzi/Moon-APNS

答案 5 :(得分:0)

试试这个:

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