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.ConnectException
mensagem detalhada de "conexão recusada" está sendo lançada quando a biblioteca chama o método SSLSocketFactory
de 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 eth0
seja 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.