У меня есть программа Java, работающая на сервере с брандмауэром, которая предназначена для отправки push-уведомлений в мое приложение для iPhone с помощью java-apns. Проблема в том, что всякий раз, когда я пытаюсь отправить уведомление, библиотека не может подключиться к серверу APNS. Из трассировки стека кажется, что при создании требуемого SSL-соединения в какой-то момент в соединении было отказано ( java.net.ConnectException
с подробным сообщением "в соединении отказано" выдается, когда библиотека вызывает SSLSocketFactory
с createSocket
метод).
Меня совсем не удивит, если брандмауэр блокирует соединение, но, к сожалению, поскольку я не управляю сервером, я не могу проверить, что это действительно так. Тот факт, что программа отлично работает с моего рабочего стола (без брандмауэра), похоже, подтверждает теорию.
Мой вопрос: знает ли кто-нибудь какой-либо метод, с помощью которого я могу найти основную причину проблемы, и / или может ли кто-нибудь сказать мне, что я должен сказать администратору сервера, чтобы он изменил, чтобы все работало (если это действительно брандмауэр Это проблема)? Мое понимание таких вещей немного ограничено, но это должно быть так же просто, как разблокировать исходящие соединения на порту 2195 (порт, используемый серверами APNS), верно?
Для справки, сервер - это Linux, и я использую версию 0.1.2 java-apns.
Что ж, вам следует начать с того, что просто попросите его / ее разблокировать исходящий порт 2195.
Вот пример:
iptables -A OUTPUT -o eth0 -p tcp --dport 2195 -j ACCEPT
Вышеизложенное предполагает, что eth0
- это внешний интерфейс с выходом в Интернет.
Возможно, вам также придется добавить строку для входящих (при условии, что источником также является порт 2195 на другом конце):
iptables -A INPUT -i eth0 -p tcp --sport 2195 -j ACCEPT
Если исходный порт для обратной связи рандомизирован, вам придется использовать модуль состояния в iptables для отслеживания соединения:
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
Это очень просто. За подобные вещи несет ответственность администратор, а не вы, поэтому, вероятно, потребуется изменение вышеуказанного. HTH.