2010-07-04 15 views
9

Escribí una página php de prueba que acaba de enviar una notificación push genérica y funciona intermitentemente. A veces se entrega el mensaje y otras veces me aparece este error:Error de notificación de inserción: "No se puede establecer el archivo de cadena de cert local"

"Mensaje: stream_socket_client() [function.stream-socket-client]: no se puede establecer el archivo local cadena cert` /var/www/ninerobot.com/ public/mlb/certs/mlbtr-push-dev.pem '; Compruebe que su configuración cafble/capath incluya detalles de su certificado y su emisor "

¿Sabe cómo puedo solucionar este problema?

Veo que en los documentos de Apple dice "Nota: para establecer una sesión TLS con APN, se debe instalar un certificado raíz de CA segura Entrust en el servidor del proveedor. Si el servidor ejecuta Mac OS X, este certificado raíz es Ya está en el llavero. En otros sistemas, es posible que el certificado no esté disponible. Puede descargar este certificado del sitio web Entrust SSL Certificates ". ¿Esto significa algo que tengo que hacer?

+0

¿Esto se solucionó? Estoy teniendo el mismo problema. –

Respuesta

7

Use esta lista para trabajar a través de este:

  1. Did que crea un certificado legítimo a través de instrucciones como these.
  2. ¿Es su archivo .pem legible por su proceso de servidor web (es decir, los permisos y la ubicación del archivo son buenos)? Muchas configuraciones ejecutan apache, por ejemplo, bajo el usuario/grupo "www-data". Nota al margen: asegúrese de que los visitantes no puedan ver el archivo .pem navegando hacia él.
  3. ¿Su servidor tiene Entrust Secure CA Root Certificate (2048 bit) instalado? De lo contrario, siga las instrucciones para descargar/instalar para su sistema operativo de servidor particular.
  4. Es saliente puerto TCP 2195 abierto? Muchos proveedores de hosting NO tienen este puerto de salida abierto por defecto.
+0

4. cómo verificar si el puerto 2195 está abierto? Desde la terminal, hice 'telnet gateway.sandbox.push.apple.com 2195' y mostró' Trying 17.149.34.66 ... Conectado a gateway.sandbox.push-apple.com.akadns.net '. Luego, después de algunos tiempo, se cerró por sí solo diciendo que *** Conexión cerrada por el host extranjero. *** ...... ¿Es eso normal? –

+0

2. No estoy seguro de si el archivo pem es legible. Cuando busco el archivo pem a través de mi navegador, muestra una página en blanco. Pero cuando hago 'cat path/to/file.pem' en el terminal, veo el contenido del certificado del archivo pem –

+0

El permiso otorgado al archivo' .pem' resuelve el problema. – Qazi

11

Yo también tengo más dificultades para hacer lo mismo. Eventualmente encontré la solución para enviar notificaciones automáticas a través de la URL global de PHP. Pruebe los pasos a continuación. Antes de que espero que todos ustedes saben para generar los certificados 3 thats PushChat.certSigningRequest, pushkey.p12 & aps_development.cer (CSR, p12, CER)

Abra su terminal y paso a paso ejecuta los siguientes comandos:

# Make sure terminal refers your correct certificate path. 
$ cd ~/Desktop/ 

# Ask system administrator to open if its not connected 
$ telnet gateway.sandbox.push.apple.com 2195 

Trying 17.110.227.35... 
Connected to gateway.sandbox.push-apple.com.akadns.net. 

Escape character is '^]'. 

# Convert .cer to .pem 
$ openssl x509 -in aps_development.cer -inform der -out PushCert.pem 

# Convert .p12 to .pem. Enter your pass pharse which is the same pwd that you have given while creating the .p12 certificate. PEM pass phrase also same as .p12 cert. 
$ openssl pkcs12 -nocerts -out PushKey1.pem -in pushkey.p12 

Enter Import Password: 

MAC verified OK 

Enter PEM pass phrase: 

Verifying - Enter PEM pass phrase: 

# To remove passpharse for the key to access globally. This only solved my stream_socket_client() & certificate capath warnings. 
$ openssl rsa -in PushKey1.pem -out PushKey1_Rmv.pem 

Enter pass phrase for PushChatKey1.pem: 

writing RSA key 

# To join the two .pem file into one file: 
$ cat PushCert.pem PushKey1_Rmv.pem > ApnsDev.pem 

Luego, finalmente mueva el SimplePush.php a la ubicación del archivo ApnsDev.pem. Ambos archivos estarán en la misma carpeta. y cambie Token del dispositivo, Frase del pase, Nombre del certificado (ApnsDev.pem), Mensaje ... En simplepush.php Descargue el archivo usando la siguiente URL. http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip luego ejecutar el archivo en el servidor de terminal o de dominio

$ php simplepush.php 

o

www.Domainname.com/push/simplepush.php // Now, url shows 'Connected to APNS Message successfully delivered'. 

Eso es todo, la notificación de inserción será volar y alcanzar el dispositivo IOS específica.

Si desea enviar 'insignia' y luego cambiar el código de carga en simplepush.php como a continuación,

// Construct the notification payload body: 

$badge = 1; 

$sound = 'default'; 

$body = array(); 

$body['aps'] = array('alert' => $message); 

if ($badge) 

    $body['aps']['badge'] = $badge; 

if ($sound) 

    $body['aps']['sound'] = $sound; 


// End of Configurable 

// Encode the payload as JSON: 

$payload = json_encode($body); 

Ahora ejecute el archivo php de nuevo y el icono de la aplicación aparece con el número de placa en el círculo rojo.

+0

sus pasos en la terminal me funcionaron. Gracias – daniherculano

+0

Feliz de escuchar :) – Anuprabha

0

Además de una gran respuesta de Steve N, déjenme agregar el último punto.

  1. Asegúrese de comprender la advertencia, especialmente incluya los detalles de su certificado y su emisor. Probablemente no tenga un bloque en su archivo .pem, es decir, issuer=, subject= etc. y su archivo comienza con -----BEGIN CERTIFICATE. Se puede eliminar accidentalmente durante la conversión del archivo de certificado.
Cuestiones relacionadas