无法使用 java-apns 连接到 APNS

Mac*_*Mac 4 firewall connection

我有一个在防火墙服务器上运行的 Java 程序,该程序旨在使用 java-apns 向我的 iPhone 应用程序发送推送通知。问题是,每当我尝试发送通知时,库都无法连接到 APNS 服务器。从堆栈跟踪来看,似乎在创建所需的 SSL 连接时,连接在某个时候被拒绝(java.net.ConnectException当库调用SSLSocketFactorycreateSocket方法时,会抛出带有“连接被拒绝”的详细消息)。

如果防火墙阻止连接,我一点也不感到惊讶,但不幸的是,由于我不管理服务器,我无法验证情况确实如此。该程序在我的(非防火墙)桌面上运行良好的事实似乎支持该理论。

我的问题是,有没有人知道我可以通过什么方法找到问题的根本原因,和/或任何人都可以告诉我我应该告诉服务器管理员进行什么更改以使事情正常工作(如果确实是防火墙那就是问题所在)?我对这些事情的理解有点有限,但它应该像解除端口 2195(APNS 服务器使用的端口)上的传出连接一样简单,对吧?

作为参考,服务器是一个 Linux 机器,我使用的是 0.1.2 版的 java-apns。

Sam*_*cke 6

好吧,您应该首先简单地要求他/她取消阻止端口 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 中的 state 模块来跟踪连接:

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
Run Code Online (Sandbox Code Playgroud)

这是非常基本的。管理员负责这种事情,而不是你,所以上面的修改很可能是必要的。哈。