Apple Push Notifications SSL Error

4

El APNS funcionó bien durante varios meses hasta unas pocas semanas. Cada vez que enviamos Notificaciones Push, la conexión se interrumpe con el siguiente error:

  

Advertencia de PHP: fwrite (): error en la operación SSL con el código 1. Mensajes de error de OpenSSL:   error: 1409F07F: rutinas SSL: SSL3_WRITE_PENDING: reintento de escritura incorrecta

Si vuelvo a conectar y reenvío o solo reenvío el mensaje al servidor de Apple, aparece el mismo error. A veces puedo enviar a todos los dispositivos sin ningún problema. Pero a veces se cancela en el dispositivo 900 o en el dispositivo 2000. No es el error I-have-no-recogido-los-dispositivos-de-Feedback-servicio-y-establece-todos-los-dispositivos-a-inactivos . Me estoy conectando al Servicio de Comentarios a intervalos regulares. Es otro tipo de error que no sé. Algo ha cambiado con la conexión SSL. ¿Puede ser que Apple haya cambiado algo con la conexión SSL? Apple dijo que no. Y no soportan PHP.

Usamos PHP 5.3.3-7 + squeeze3 con Suhosin-Patch (cli) (construido: 28 de junio de 2011 08:24:40) . Esta es la nueva versión estable de PHP para Debian Linux Squeeze. Esta versión de PHP utiliza OpenSSL 0.9.8o (01 de junio de 2010) en nuestro servidor.

Por favor ayuda.

    
pregunta TheFox 29.08.2011 - 10:27

1 respuesta

4

Tenía un problema similar en Python, supongo que las bibliotecas subyacentes de ssl son las mismas, por lo que la solución podría ser similar.

SSL3_WRITE_PENDING parece ser causado cuando falla la escritura de un socket y luego intenta escribir de nuevo. En este caso, por el motivo que sea, SSL_write requiere que vuelva a intentar la escritura con los mismos bytes exactos que la escritura original o, de lo contrario, omite el error SSL_WRITE_PENDING.

El patrón de errores que estaba viendo era el Tiempo de espera de la conexión, luego muchos errores SSL_WRITE_PENDING. Esto se debió a que la primera de mis escrituras falló (por ejemplo, tal vez con un error de tiempo de espera o un error de conexión cerrada porque envié una solicitud de inserción poco fiable), luego de ese error intenté continuamente reutilizar el socket roto (y me estaba devolviendo) el error SSL_WRITE_PENDING menos informativo)

¿Está seguro de que está utilizando una nueva conexión de socket cuando 'vuelve a conectar y reenviar'? Porque no habría pensado que deberías obtener SSL_WRITE_PENDING en una nueva conexión de socket al servidor APNS.

Otra cosa que podría ayudar es usar el formato de notificación mejorado, porque si accidentalmente le envías un correo electrónico al servidor de Apple, te enviará un código de error antes de que cierres la conexión. Si aún no está utilizando mejorado, sería bueno hacerlo porque entonces puede asegurarse de que no está cometiendo errores simples como el token incorrecto o la carga útil durante demasiado tiempo.

    
respondido por el mrkhingston 14.11.2012 - 07:06

Lea otras preguntas en las etiquetas