2010-01-19 5 views
2

Je reçois l'exception suivante lors de l'utilisation du fournisseur de notifications push Apple (apns-sharp). Les notifications push fonctionnent sur ma machine de développement mais elles ne fonctionneront pas dans l'hébergement Cloud de Rackspace. J'ai la configuration exacte de confiance moyenne faite sur commande de Rackspace Cloud fonctionnant avec mon dev. machine donc la confiance moyenne ne peut pas être la question ici. En outre, le fichier de certificat ne peut pas être le problème car il fonctionne sur mon dev. machine.SslStream.AuthenticateAsClient Exception lors de l'utilisation du fournisseur de notifications Apple Push iPhone (apns-sharp)

Des idées?

Mise à jour # 1: cela aurait quelque chose à voir avec le serveur racine Entrust que ne peut pas être sur les serveurs Rackspace Cloud? J'ai vérifié dans le code apns-sharp et il semble qu'il ignore la vérification du certificat, mais je ne suis pas sûr à 100%.

The credentials supplied to the package were not recognized at System.Net.SSPIWrapper.AcquireCredentialsHandle(SSPIInterface SecModule, String package, CredentialUse intent, SecureCredential scc) 
    at System.Net.Security.SecureChannel.AcquireCredentialsHandle(CredentialUse credUsage, SecureCredential& secureCredential) 
    at System.Net.Security.SecureChannel.AcquireClientCredentials(Byte[]& thumbPrint) 
    at System.Net.Security.SecureChannel.GenerateToken(Byte[] input, Int32 offset, Int32 count, Byte[]& output) 
    at System.Net.Security.SecureChannel.NextMessage(Byte[] incoming, Int32 offset, Int32 count) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
    at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
    at System.Net.Security.SslStream.AuthenticateAsClient(String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation) 
    at JdSoft.Apple.Apns.Notifications.NotificationConnection.OpenSslStream() 
    at JdSoft.Apple.Apns.Notifications.NotificationConnection.Reconnect() 
    at JdSoft.Apple.Apns.Notifications.NotificationConnection.workerMethod() 
+0

Avez-vous déjà essayé d'utiliser l'emprunt d'identité dans le fichier web.config dans l'espoir de faire fonctionner le X509KeyStorageFlags.MachineKeySet? J'ai la même situation que vous et j'essaie de travailler avec Rackspace pour le résoudre maintenant. J'ai également essayé de passer le chemin vers le .p12 ainsi que les octets bruts vers le nouveau X509Certificate2 mais pas de chance non plus. –

+0

Non Je crois que Rackspace n'a pas pu résoudre le problème en raison des paramètres d'approbation moyenne. J'ai changé ma conception pour utiliser PHP pour accéder à l'APNS. – Luke

Répondre

0

Dans mon cas, ce problème était lié à la sécurité de Trust moyen sur les sites cloud Rackspace que j'étais incapable de résoudre. Pour surmonter ce problème, j'ai changé le design pour utiliser le code PHP pour accéder à l'APNS.

2
+0

Je vais essayer et faire un rapport. Le problème ne se produirait pas sur les deux dev. machine et nuage de production si c'était la cause? – Luke

+0

Je viens de terminer le test (en sélectionnant uniquement le certificat et en ne sélectionnant pas les deux) et cela n'a pas résolu le problème sur le serveur de production. – Luke

+0

il a résolu le problème pour moi, merci beaucoup! – Tomen

0

Pour les personnes qui continue à obtenir cette exception:

J'ai eu la même exception et la lecture sur toutes les procédures et forums « APNs-forte » n'a pas aidé. Tout était bon pour exporter le certificat du MAC, mon problème était que comme j'installais le certificat dans la machine locale avec les configurations par défaut, ce certificat ne pouvait pas être utilisé parce que le privateKey n'était pas importé. Ensuite, lorsque vous ouvrez un nouveau certificat pour l'installer, vous devez vous assurer d'installer la clé privée. Dans le code, vous devriez avoir quelque chose comme:

new X509Certificate2(rawCertificateInBytes, Password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); 

qui a résolu mon problème.

Questions connexes