Push Notification, easyapns, erreur PHP et OVH mutu
guetweb
Membre
Bonjour,
Tout est dans le titre mais je vais quand meme détaillé un peu
et tout d'abord, je précise que je ne suis pas développeur iphone mais je suis en charge de la partie webservices sur le développement d'une appli iphone rattachée a un site web.
Grâce au conseil de ce forum la quasi totalité de la partie webservice fonctionne parfaitement.
Malheureusement, une erreur PHP apparait dans la partie gestion des notifications. Le serveur de push employé est easyapns.
La boite chargée du dev de la partie iphone a elle même mis en place easyapns, mais voyant que leur script provoque une erreur, me demande de faire le nécessaire pour que ça fonctionne, en me disant que le problème vient de librairie PHP manquantes sur l'hébergement.
Au niveau de l'hébergement je suis sur un mutualisé d'ovh, et openSSL (OpenSSL 0.9.8c 05 Sep 2006 ) est bien présent, si l'on se réfère au phpinfo. Je ne vois pas qu'elle librairie pourrais manquer (et a priori eux non plus...).
Voici l'erreur récupérée lors d'une tentative de push d'un message de test.
Avez vous deja vu de tels erreurs? Si oui pouvez vous me donner une piste pour la résoudre?
Les certificats (sandbox et production) sont bien sur le serveur, l'erreur ne pourrait-elle pas venir d'eux?
Merci par avance, de vos pistes et/ou conseil.
Arnaud.
Tout est dans le titre mais je vais quand meme détaillé un peu
et tout d'abord, je précise que je ne suis pas développeur iphone mais je suis en charge de la partie webservices sur le développement d'une appli iphone rattachée a un site web.
Grâce au conseil de ce forum la quasi totalité de la partie webservice fonctionne parfaitement.
Malheureusement, une erreur PHP apparait dans la partie gestion des notifications. Le serveur de push employé est easyapns.
La boite chargée du dev de la partie iphone a elle même mis en place easyapns, mais voyant que leur script provoque une erreur, me demande de faire le nécessaire pour que ça fonctionne, en me disant que le problème vient de librairie PHP manquantes sur l'hébergement.
Au niveau de l'hébergement je suis sur un mutualisé d'ovh, et openSSL (OpenSSL 0.9.8c 05 Sep 2006 ) est bien présent, si l'on se réfère au phpinfo. Je ne vois pas qu'elle librairie pourrais manquer (et a priori eux non plus...).
Voici l'erreur récupérée lors d'une tentative de push d'un message de test.
Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown in /homez.56/pixrider/www/push/classes/class_APNS.php on line 397
Avez vous deja vu de tels erreurs? Si oui pouvez vous me donner une piste pour la résoudre?
Les certificats (sandbox et production) sont bien sur le serveur, l'erreur ne pourrait-elle pas venir d'eux?
Merci par avance, de vos pistes et/ou conseil.
Arnaud.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Il me semble qu'il faut :
1) Vérifier que les constantes utilisées par le script easyapns sont correctement configurées pour dire où est ton fichier de certificat (.pem), car si le chemin d'accès au fichier .pem est mauvais et qu'il ne le trouve pas ça ne peut pas marcher
2) Vérifier que le fichier .pem contenant le certificat et sa clé sont valides et ont été générés correctement
La génération du PEM que nécessite OpenSSL et easyapns est pas forcément triviale surtout quand tu n'y connais pas grand chose en certificats, SSL & co, mais perso à chaque fois que j'ai à regénérer le certificat de push (en général parce qu'il a expiré au bout d'un an -- ou moins pour le certif sandbox de tests pour les devs) je suis ce tuto.
En gros une fois que tu as demandé à Apple de générer un certificat et ses clés publiques et privées (et que tu as ajouté tout ça à ton trousseau d'accès) il faut faire une petite manip avec openssl pour extraire tout ça et le convertir en un fichier PEM adéquat dans lequel easyapns pourra trouver tout ce qu'il lui faut (certificat, clé privée, etc)
Au niveau du chemin des fichiers .pem j'ais deja vérifié les chemins. Mais je vais de nouveau jeter un oeil.
En ce qui concerne les certificats eux mêmes ils ont étaient générés par la boite de déc iphone, tout comme les fichiers pem. Je vais voir avec eux si ils ont essayer de les re-generer.
Arnaud.
Bien sûr gateway.sandbox.push.apple.com:2195 est l'adresse du service de push d'apple (APNS, Apple Push Notifications Service) dédié au mode "sandbox", donc qui est fait pour les tests en phase de dev, et qui ne fonctionne qu'avec le certificat PEM de sandbox.
Fais donc aussi attention au passage que tu ne mélanges pas les 2 :
- En phase de dev et de tests, on utilise le serveur APNS de sandbox, pour tester les push, vérifier que ça marche, envoyer des push d'essai et de debug, etc. Donc c'est un certificat dédié pour accéder à ce serveur de sandbox.
- Une fois que tout marche, en phase de prod on utilise le serveur APNS de prod pour les push, donc là il faut le certificat de production.
Si tu utilises le certificat push de production (donc fait pour se connecter au serveur de prod APNS) en mode dev (quand l'appli est en cours de dev, et compilée/testée pour utiliser le serveur de sandbox) forcément ça ne peut pas marcher. Et vice-versa bien sûr. Donc pense à mettre sur le serveur les deux certificats, pour que ça marche dans les 2 cas, qd ils font des tests avec le service de sandbox et quand ils passeront en prod.
(PS : Tout ceci est décrit dans le Programming Guide Apple dédié aux notifications Push)
Au niveau des chemins employés il ne semble pas y avoir d'erreur. De même les deux certificats (dev et prod) sont bien présents sur le serveur.
J'ai pu tester ce matin en ligne de commande et j'obtiens l'erreur suivante:
Je me dis donc que le fichier server-ca-cert.pem doit me manquer.
Question il sort d'où celui la?