web-dev-qa-db-fra.com

La connexion APNS ssl: //gateway.sandbox.Push.Apple.com: 2195 échoue

j'essaye de faire un serveur de notification push. J'obtiens la connexion à ssl: //gateway.sandbox.Push.Apple.com: 2195 avec telnet.

telnet gateway.sandbox.Push.Apple.com 2195
Trying 17.172.232.229...
Connected to gateway.sandbox.Push-Apple.com.akadns.net.
Escape character is '^]'.

mon * .pem est ok (je l'utilise sur un autre serveur). J'utilise le même projet sur un autre serveur et cela fonctionne là-bas, mais pas le clone sur un autre serveur.

J'obtiens ces erreurs:

Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.Push.Apple.com:2195 (Unknown error) in /var/www/try.php on line 69

Le certificat n'est PAS expiré, il fonctionne sur l'autre serveur et la date est la même.

Quelqu'un sait-il quelle pourrait être l'erreur?

Je travaille sur

Apache/2.2.9 (Debian) PHP/5.2.17-0.dotdeb.0 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g

EDIT: Il semble que l'utilisation du même certificat sur différents serveurs ne fonctionne pas. Peut-être que cela est bloqué par les serveurs Apples.

15
Starbax

J'utilise apn_on_Rails pour cela, mais je pense que cela fonctionnera pour vous tant que vous utilisez un pem file. J'ai résolu ce problème en téléchargeant à nouveau le certificat et le certificat intermédiaire, en régénérant le fichier de notification push pem en utilisant ces instructions:

Une fois que vous avez le certificat de Apple pour votre application, exportez votre clé et le certificat Apple sous forme de fichiers p12. Voici une procédure pas à pas pour savoir comment procéder) :

1. Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key. 
2. Right click and choose `Export 2 items…`. 
3. Choose the p12 format from the drop down and name it `cert.p12`.

Now covert the p12 file to a pem file:  

  $ openssl pkcs12 -in cert.p12 -out Apple_Push_notification_production.pem -nodes -clcerts
14
coneybeare

Ce type d'erreur se produit dans deux situations:

  1. Lorsque le port 2195 est bloqué.
  2. Quand le .pem le fichier n'est pas fait correctement (comme dans mon cas).

Essayez ces deux points. Vous n'obtiendrez sûrement aucune erreur.

6
Himanshu Mohan

J'ai eu le même problème mais la solution dans mon cas était ce certificat pem qui nécessitait un chemin absolu

  1. Utilisez le chemin absolu pour la clé privée au lieu du chemin relatif.
  2. Assurez-vous que l'utilisateur php (ou l'utilisateur du serveur Web, selon .. www-data, Apache, nginx, www ...) est autorisé à le lire (chown, chmod).

de ici

3
supermus

Peut-être que votre ISP bloque les ports 2195 et 2196. J'ai eu le même problème, je leur ai demandé de l'ouvrir et cela a fonctionné pour moi.

2
dgeneva

Vous mentionnez:

J'utilise le même projet sur un autre serveur et cela fonctionne là-bas, mais pas le clone sur un autre serveur.

J'ai constaté que les certificats .pem ne sont pas transférés. Voici les étapes que j'ai suivies pour qu'une application qui fonctionne sur une machine OS X fonctionne sur une autre (je ne sais pas comment faire pour les machines non Apple):

  1. Copiez sur le premier fichier .p12 du serveur (certificat et clé privée associée).
  2. Copiez ce fichier .p12 dans votre trousseau. Il deviendra un certificat là-bas.
  3. Exportez ce certificat (avec la clé privée associée) dans un fichier nouvea .p12.
  4. Utilisez openssl pour convertir ce nouveau fichier .p12 en un nouveau fichier .pem
  5. Vous pouvez maintenant utiliser le nouveau fichier .pem dans votre commande openssl sur le nouveau serveur.

J'espère que cela vous sera utile

1
Thomas O'Dell

Quelques découvertes aléatoires sur Internet qui pourraient aider:

Il peut s'agir d'un problème de certificat. Essayez les options de flux allow_self_signed et verify_peer pour vérifier cela.

Essayez d'utiliser explicitement sslv2: // ou sslv3: //?

Problème d'autorisation sur "/ dev/urandom"

1
user1316813

J'ai eu un problème similaire sur ma box Linux. Pour moi, c'était le problème SELinux.

Donc, dans votre fichier/etc/selinux/config, définissez SELINUX = force sur SELINUX = désactivé. Et recommence. C'est ça.

1
Kashif