2011-07-15 129 views
7

我有一个数据服务托管在天蓝色从我发送通知到iPhone,但与APN建立连接我得到以下错误 “一个调用SSPI失败。收到的消息意外或格式不正确。“我也refered以下为同样的错误链接,但仍然得到错误apns尖锐iPhone证书错误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

得到了解决我刚才改变x509证书到X509Certificate2和X509CertificateCollection到X509Certificate2Collection

0

试试这个:

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

也试过但是同样的错误。 我有正确的证书和密码是有什么问题代码 –

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

+0

嘿,我做你提到的,但我仍然得到同样的错误,“一个调用sspi失败..........” –

+0

有可能仍然是您的p12文件路径的问题。首先尝试使用硬编码路径来查看是否可能是问题。并且不要忘记在Windows中注册文件。 –

+0

我已经在受信任的root ca部分和个人部分注册了证书。我试着用硬编码的值,但仍然得到相同的错误。 –

1

小晚了,但谁知道它可以帮助别人......我犯了一个大错误与证书,并安装了.CER我从苹果开发者网站下载......我知道......我的错,但如果你像我一样愚蠢可能会发生:-P

当你下载.CER时,你必须将它导入到你的钥匙串,然后导出证书,包括私钥......这将生成一个.P12证书,这是你必须在Windows机器上安装的证书。一旦我在LocalMachine/Personal存储中安装.P12,身份验证对我来说工作得很好。

3

我不知道这是否会在3年后是有帮助的,但我离开iOS8上的答案。

苹果已经改变了服务器的安全性和对上你提到的线,你必须从SSL更改为TLS:

原始代码:

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

新代码:

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

我希望这些信息对某人有帮助。

有人在GIT论坛中评论过这个

+0

解决了我的问题,所以谢谢你的答案。我希望他们有一些信息,他们做了这个变化 – tyczj

+0

非常感谢你,马可安东尼奥! – Alexander