Não é possível conectar-se ao APNS com java-apns

Não é possível conectar-se ao APNS com java-apns

Eu tenho um programa Java em execução em um servidor com firewall que se destina a enviar notificações push para meu aplicativo para iPhone usando java-apns. O problema é que sempre que tento enviar uma notificação, a biblioteca não consegue se conectar ao servidor APNS. A partir do rastreamento de pilha, parece que ao criar a conexão SSL necessária, a conexão está sendo recusada em algum momento (uma java.net.ConnectExceptionmensagem detalhada de "conexão recusada" está sendo lançada quando a biblioteca chama o método SSLSocketFactoryde createSocket).

Não me surpreenderia se o firewall estivesse bloqueando a conexão, mas infelizmente, como não gerencio o servidor, não consigo verificar se esse é realmente o caso. O fato de o programa funcionar bem na minha área de trabalho (sem firewall) parece apoiar a teoria.

Minha pergunta é: alguém conhece algum método pelo qual eu possa encontrar a causa raiz do problema e/ou alguém pode me dizer o que devo dizer ao administrador do servidor para alterar para que as coisas funcionem (se for realmente o firewall esse é o problema)? Meu entendimento sobre essas coisas é um pouco limitado, mas deveria ser tão simples quanto desbloquear conexões de saída na porta 2195 (a porta usada pelos servidores APNS), certo?

Para referência, o servidor é uma caixa Linux e estou usando a versão 0.1.2 do java-apns.

Responder1

Bem, você deve começar simplesmente pedindo a ele para desbloquear a porta de saída 2195.

Aqui está um exemplo:

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

O texto acima pressupõe que eth0seja a interface externa voltada para a Internet.

Talvez você também precise adicionar uma linha para entrada (assumindo que a origem também seja a porta 2195 do outro lado):

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

Se a porta de origem para a comunicação de retorno for aleatória, você terá que usar o módulo state no iptables para rastrear a conexão:

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

Isso é muito básico. O administrador é responsável por esse tipo de coisa, não você, portanto, provavelmente será necessária a modificação do item acima. HTH.

informação relacionada