2011-07-15 125 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