web-dev-qa-db-fra.com

Production PushSharp APNS: les informations d'identification fournies dans le package n'ont pas été reconnues (le développement fonctionne cependant)

Mon application vient tout juste d'être prête pour la vente sur l'App Store, mais aucun de mes appareils de production (appareils ayant installé l'application depuis l'App Store) ne reçoit de notifications Push. Lorsque j'essaie d'envoyer une notification Push à un périphérique de production, le message d'erreur suivant s'affiche:

"The credentials supplied to the package were not recognized" 
(System.ComponentModel.Win32Exception)

Cette exception est renvoyée en interne et capturée dans une boucle infinie:

enter image description here

Il est jeté à la ligne 539 du fichier ApplePushChannel.cs:

    try
{
    stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, 
        System.Security.Authentication.SslProtocols.Ssl3, false);
    //stream.AuthenticateAsClient(this.appleSettings.Host);
}
catch (System.Security.Authentication.AuthenticationException ex)
{
    throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex);
}

Voici la sortie de l'application dans Visual Studio Output:

...
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
A first chance exception of type 'System.ObjectDisposedException' occurred in System.dll
A first chance exception of type 'System.ComponentModel.Win32Exception' occurred in System.dll
...(it keeps getting thrown until I stop it manually)

Voici les choses que j'ai essayées:

  • Vérifiez deux fois que l'ID de périphérique que j'essaie est enregistré avec un jeton de périphérique de production.
  • Le certificat de production APNS a été révoqué et régénéré, puis exporté avec la clé privée vers un nouveau fichier .p12, puis renouvelé avec le nouveau certificat. (J'ai eu le même problème avec les notifications push de développement, et cela a résolu mon problème)
  • Modification du protocole SSL de Ssl3 à Tls. (Il y a quelques jours, il y avait un problème avec la version du protocole et cela a été corrigé temporairement. Cela ne devrait pas être nécessaire, mais l'erreur que je reçois est la même que celle que j'avais avant que cette correction soit corrigée)
  • Vérifié que j'essaie réellement de me connecter au serveur de production avec le certificat de production au lieu du serveur/certificat de développement.
  • Si je peux accéder directement au serveur APNS (mon application ASP.NET réside dans une machine Parallels VM Windows 8.1) sur mon Mac, voici la sortie de ce dernier, pour éviter toute confusion:

(Sortie du terminal) Edit: Je cinglais le serveur sandbox, j’ai envoyé un ping au serveur de production, j’ai vérifié que je pouvais me connecter aussi, ce n’est donc pas le problème.

can$ Sudo nmap -p 2195 gateway.sandbox.Push.Apple.com
Starting Nmap 6.40-2 ( http://nmap.org ) at 2014-04-28 00:06 EEST
Nmap scan report for gateway.sandbox.Push.Apple.com (17.149.34.189)
Host is up (0.49s latency).
Other addresses for gateway.sandbox.Push.Apple.com (not scanned): 17.149.34.187 17.149.34.188
PORT     STATE SERVICE
2195/tcp open  unknown

Pourquoi PushSharp ne négocierait-il pas avec les serveurs APNS? 

27
Can Poyrazoğlu

J'ai compris le problème. J'ai révoqué et régénéré le certificat à nouveau, et cette fois j'ai uniquement exporté la clé privée (sans le certificat). Dans l’accès au trousseau, j’ai exporté en tant que .p12 et utilisé le nouveau fichier. Pour une raison quelconque, PushSharp ne fonctionnait pas bien avec .p12 lorsque le certificat et la clé privée sont présents dans le fichier.

73
Can Poyrazoğlu

L'exception "Les informations d'identification fournies au package n'ont pas été reconnues" indique généralement que l'utilisateur qui exécute le code ne dispose pas d'autorisations suffisantes. 

Si vous envoyez des notifications Push depuis une application Web Azure ou une tâche Web, ne chargez pas le certificat APNS à partir d'un fichier ou d'une chaîne codée en base64. Accédez au portail Azure et ajoutez le certificat au site Web à la place. Notez l'empreinte.

 certificate in Azure Portal

Ajoutez ensuite le paramètre WEBSITE_LOAD_CERTIFICATES et définissez-le sur * (astérisque).

Maintenant, le certificat APNS peut être utilisé à partir du code C #:

string thumbprint = "YOUR THUMBPRINT";
var store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
var certificate = store.Certificates.Find(
    X509FindType.FindByThumbprint, thumbprint, validOnly: false)
    .Cast<X509Certificate2>().SingleOrDefault();
var apnsConfig = new ApnsConfiguration(
    ApnsConfiguration.ApnsServerEnvironment.Production, certificate);

Références

3
Pavel Chuchuva

Je l'ai testé encore et encore.

Convertissez le fichier p12 au format pem et il fonctionnera avec les utilisateurs limités IIS et peut-être avec Azure ....

1
Moshe L

Aucune des réponses n'a fonctionné pour moi. En fin de compte, j'ai fini par importer le certificat et la clé privée dans le magasin de certificats Windows, puis de l'exporter en tant que .pfx.

1
chedabob

Je recevais la même exception et, dans mon cas, je devais ajouter une autorisation pour mon certificat de services IOS.

Cliquez avec le bouton droit sur le certificat dans mmc -> Toutes les tâches -> Gérer les clés privées .... J'ai ajouté NETWORK SERVICE car le pool d'applications iis de mon application Web utilisait ce compte. 

Voir pour plus de détails: http://blog.falafel.com/Apple-Push-notifications-certificates-and-iis/

0
BIKTOP