2011-07-15 8 views
7

Mam usługę danych hostowaną na błękitnym tle, z której wysyłam powiadomienie do iPhone'a, ale podczas nawiązywania połączenia z apns pojawia się następujący komunikat o błędzie "Połączenie z SSPI nie powiodło się. otrzymana wiadomość była nieoczekiwana lub źle sformatowana. " Ja również określić następujące linki do tego samego błędu, ale nadal uzyskiwanie błądBłąd certyfikatu iPhone'a w apns sharp Wywołanie usługi SSPI nie powiodło się

apple push notification with APNS sharp i C# 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); 
     } 

mam zainstalowane niezbędne certyfikaty na VM również. Jedno ostrzeżenie dostaję na iphone developer_identity certificate, który dostałem od jabłka, to że "Windows nie ma wystarczających informacji, aby zweryfikować ten certyfikat" czy jest coś nie tak z moim certyfikatem iphone. proszę mi pomóc siedzę

Odpowiedz

6

dostał rozwiązanie I właśnie zmieniły X509Certificate do X509Certificate2 i X509CertificateCollection do X509Certificate2Collection

0

Spróbuj tego:

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

również próbował, ale ten sam błąd. Mam poprawny certyfikat i hasło jest coś jest nie tak z kodem –

3

Proponuję wykonaj kroki opisane w tym poradniku, aby utworzyć plik p12 od was certyfikat programisty.

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

Jest to także ważne, aby zarejestrować ten plik w systemie Windows. Jest to tak proste, jak dwukrotne kliknięcie pliku po jego wygenerowaniu. Nie zapomnij zaktualizować wywołania do konstruktora X509Certificate później.

Tutorial działa równie dobrze na Windows, ale może trzeba pobrać klienta OpenSSL, które można znaleźć tutaj:

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

+0

hej, zrobiłem jak wspominasz, ale wciąż dostaję ten sam błąd, który "Zadzwoń do sspi nie powiodło się .........." –

+0

nadal może być problem ze ścieżką do pliku p12. Najpierw wypróbuj zakodowaną ścieżkę, aby sprawdzić, czy to może być problem. I nie zapomnij zarejestrować pliku w systemie Windows. –

+0

Rejestrowałem już certyfikat w zaufanym katalogu głównym, a także w sekcji osobistej. próbowałem z wartością zakodowaną, ale wciąż otrzymuję ten sam błąd. –

1

trochę późno, ale kto wie, czy to pomaga kogoś ... Zrobiłem wielki błąd z certyfikatem i zainstalowaniu cer I pobrane z witryny Apple Developer Site ... Wiem ... moja wina, ale może się zdarzyć, jeśli jesteś tak głupi, jak ja :-P

Po pobraniu .CER, musisz zaimportować go do swojego keychain, a następnie WYŚLIJ certyfikat, WRAZ Z kluczem prywatnym ..., który wygeneruje certyfikat .P12 i TO jest tym, który musisz zainstalować na komputerze z systemem Windows. Po zainstalowaniu .P12 w sklepie LocalMachine/Personal, uwierzytelnianie działało dobrze dla mnie.

1

Mam ten sam problem, używam pliku certyfikatu .p12 zamiast .pfx i używam moon-pensów do wysyłania powiadomień, problem został rozwiązany.

kod Donwnload Moon-APNS tutaj: https://github.com/arashnorouzi/Moon-APNS

3

Nie wiem, czy to będzie pomocne po 3 latach, ale zostawić odpowiedź dla systemów iOS 8.

Apple zmienił bezpieczeństwo serwera i prawo na linii można wymienić, trzeba zmienić z SSL TLS:

Kod oryginalny:

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

Nowy kod:

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

Mam nadzieję, że ta informacja jest dla kogoś przydatna.

Ktoś skomentował to na forum GIT

+0

rozwiązał mój problem, dzięki za odpowiedź. Szkoda, że ​​nie mieli informacji, że dokonali tej zmiany. – tyczj

+0

Dziękuję bardzo za marco antonio! – Alexander