Push Notification, easyapns, erreur PHP et OVH mutu

guetwebguetweb Membre
06:12 modifié dans Vos applications #1
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. :D

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.

Réponses

  • AliGatorAliGator Membre, Modérateur
    décembre 2011 modifié #2
    Oui j'ai déjà  eu ce genre d'erreur quand le certificat que tu demandes d'utiliser dans le script PHP n'est plus valide (mal généré, ou a expiré, etc).

    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)
  • guetwebguetweb Membre
    06:12 modifié #3
    Merci bien pour cette réponse Aligator .

    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.
  • AliGatorAliGator Membre, Modérateur
    06:12 modifié #4
    D'après un post vu sur StackOverflow : tu peux essayer la commande suivante pour tenter de te connecter en ligne de commande aux serveurs Apple avec ton certificat et donc vérifier que ça fonctionne (et donc que ton certificat est valide et que le pb est autre part) ou pas (et donc que c'est bien le certif qui coince)

    openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert YourSSLCertAndPrivateKey.pem -debug -showcerts -CAfile server-ca-cert.pem
    
    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)
  • guetwebguetweb Membre
    06:12 modifié #5
    Bonjour Aligator et merci encore de pencher sur mes déboires...

    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:

    29842:error:02001002:system library:fopen:No such file or directory:bss_file.c:122:fopen(&#039;server-ca-cert.pem&#039;,&#039;r&#039;)<br />29842:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:125:<br />29842:error:0B084002:x509 certificate routines:X509_load_cert_crl_file:system lib:by_file.c:274:<br />gethostbyname failure<br />connect:errno=0
    


    Je me dis donc que le fichier server-ca-cert.pem doit me manquer.
    Question il sort d'où celui la?
Connectez-vous ou Inscrivez-vous pour répondre.