No se puede conectar a APNS con java-apns

No se puede conectar a APNS con java-apns

Tengo un programa Java ejecutándose en un servidor con firewall cuyo objetivo es enviar notificaciones automáticas a la aplicación de mi iPhone mediante java-apns. El problema es que cada vez que intento enviar una notificación, la biblioteca no logra conectarse al servidor APNS. Desde el seguimiento de la pila, parece que al crear la conexión SSL requerida, la conexión se rechaza en algún momento ( java.net.ConnectExceptionse genera un mensaje detallado de "conexión rechazada" cuando la biblioteca llama SSLSocketFactoryal createSocketmétodo).

No me sorprendería en absoluto si el firewall está bloqueando la conexión, pero lamentablemente como no administro el servidor no puedo verificar que ese sea efectivamente el caso. El hecho de que el programa funcione bien desde mi escritorio (sin firewall) parece respaldar la teoría.

Mi pregunta es, ¿alguien conoce algún método mediante el cual pueda encontrar la causa raíz del problema, y/o alguien puede decirme qué debo decirle al administrador del servidor que cambie para que todo funcione (si es que realmente es el firewall? ese es el problema)? Mi comprensión de este tipo de cosas es un poco limitada, pero debería ser tan simple como desbloquear las conexiones salientes en el puerto 2195 (el puerto utilizado por los servidores APNS), ¿verdad?

Como referencia, el servidor es una máquina Linux y estoy usando la versión 0.1.2 de java-apns.

Respuesta1

Bueno, deberías empezar simplemente pidiéndole que desbloquee el puerto 2195 saliente.

He aquí un ejemplo:

iptables -A OUTPUT -o eth0 -p tcp --dport 2195 -j ACCEPT

Lo anterior supone que eth0es la interfaz externa orientada a Internet.

Es posible que también tengas que agregar una línea entrante (suponiendo que la fuente también sea el puerto 2195 en el otro extremo):

iptables -A INPUT -i eth0 -p tcp --sport 2195 -j ACCEPT

Si el puerto de origen para la comunicación de retorno es aleatorio, tendrás que usar el módulo de estado en iptables para rastrear la conexión:

iptables -A OUTPUT -o eth0 -p tcp --dport 2195 \ 
         -m state --state NEW, ESTABLISHED, RELATED \
         -j ACCEPT

iptables -A INPUT -i eth0 -p tcp \
         -m state --state ESTABLISHED, RELATED \
         -j ACCEPT

Eso es muy básico. El administrador es responsable de este tipo de cosas, no usted, por lo que probablemente sea necesario modificar lo anterior. HTH.

información relacionada