Apple push notifications Worklight推送通知(APNS)失败,出现javax.net.ssl.SSLHandshakeException

Apple push notifications Worklight推送通知(APNS)失败,出现javax.net.ssl.SSLHandshakeException,apple-push-notifications,ibm-mobilefirst,websphere-liberty,ibm-jdk,Apple Push Notifications,Ibm Mobilefirst,Websphere Liberty,Ibm Jdk,我在iOS上有一个带有推送通知的Worklight 6.1应用程序。它工作正常,直到Worklight服务器出现问题。之后的所有推送通知都会失败,直到服务器重新启动 Worklight服务器是Linux x86_64上的Liberty 8.5.5.0 使用JDK:java-1.7.0-ibm-1.7.0.5.0.x86_64 Worklight数据库是Derby(这是一个测试服务器) 当我启动服务器时,一切都很好 服务器启动10分钟后,我看到: [2/20/14 19:39:15:319 CST

我在iOS上有一个带有推送通知的Worklight 6.1应用程序。它工作正常,直到Worklight服务器出现问题。之后的所有推送通知都会失败,直到服务器重新启动

Worklight服务器是Linux x86_64上的Liberty 8.5.5.0 使用JDK:java-1.7.0-ibm-1.7.0.5.0.x86_64 Worklight数据库是Derby(这是一个测试服务器)

当我启动服务器时,一切都很好

服务器启动10分钟后,我看到:

[2/20/14 19:39:15:319 CST] 0000003e com.notnoop.apns.internal.ApnsFeedbackConnection             W Failed to retreive invalid devices
java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.j: End user tried to act as a CA
但这似乎并没有破坏任何东西。推送通知仍然有效。服务器启动30分钟后,我看到:

[2/20/14 19:59:48:657 CST] 00000061 com.ibm.ws.webcontainer.util.ApplicationErrorUtils           E SRVE0777E: Exception thrown by application class 'org.jboss.resteasy.core.SynchronousDispatcher.handleApplicationException:365'
org.jboss.resteasy.spi.UnhandledException: org.springframework.dao.InvalidDataAccessApiUsageException: Multiple DISTINCT aggregates are not supported at this time. {SELECT COUNT(DISTINCT t0.DEVICE), COUNT(DISTINCT t1.ID) FROM NOTIFICATION_DEVICE t0 INNER JOIN NOTIFICATION_USER t1 ON t0.USERSUBSCRIPTIONID = t1.ID WHERE (t0.APPLICATIONID IN (?) AND t0.PLATFORM = ?)} [code=30000, state=42Z02]; nested exception is <openjpa-1.2.2-r422266:898935 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: Multiple DISTINCT aggregates are not supported at this time. {SELECT COUNT(DISTINCT t0.DEVICE), COUNT(DISTINCT t1.ID) FROM NOTIFICATION_DEVICE t0 INNER JOIN NOTIFICATION_USER t1 ON t0.USERSUBSCRIPTIONID = t1.ID WHERE (t0.APPLICATIONID IN (?) AND t0.PLATFORM = ?)} [code=30000, state=42Z02]
之后的所有重试都会导致相同的失败


google在“最终用户试图充当CA”和“APN”上的一些点击表明这是JDK 1.5问题(在1.6中修复),可以通过使用IbmPKIX信任管理器来修复,但我确信我使用的是JDK 1.7,java中的信任管理器。升级到Worklight 6.0.0.2修复包后,安全性是PKIX

,我们在运行JDK 7的Websphere上也看到了同样的问题。经过一些研究,我发现这个问题是为IBMJDK7报告的。JDK中包含的委托证书存在问题。我尝试了从JDK 6中替换cacerts文件的解决方法,结果成功了

 Replace jre\lib\security\cacerts file in JDK 7 with
 jre\lib\security\cacerts file in JDK 6

注意:若要与APN建立TLS会话,必须在提供程序的服务器上安装Trust Secure CA根证书。如果服务器正在运行OS X,则此根证书已在密钥链中。在其他系统上,证书可能不可用。您可以从委托SSL证书网站下载此证书


再一次……这花了足够长的时间才弄清楚

潜在的问题是Worklight服务器托管在SoftLayer上,显然SoftLayer防火墙默认监视套接字连接,如果连接空闲约10分钟,则会将其丢弃

因此,连接到APN和push的worklight服务器工作正常。然后10分钟过去了,没有任何推送通知,防火墙丢弃了Worklight服务器和APNS服务器之间的套接字。所有后续推送请求都以静默方式失败,因为Worklight具有APNS服务的死套接字


我们重新配置了防火墙,允许与APN的连接无限期处于空闲状态,问题得到解决。

OK。我以为我已经有了这个序列,但是通过进一步的测试,我真正能说的是,有时候推送式APN可以工作,有时候由于上面的错误而失败。使用6并观察是否有任何更改。切换到java-x86_64-60(1.6.0)。现在,APNS在服务器启动时工作,但一段时间后停止工作,Worklight server日志中没有任何错误。通知永远不会到达设备上。GCM继续工作,没有任何问题。请联系JayaKarthik Jayabalan(Worklight中的IBM同事和推送通知开发人员)。听起来这需要调查。@IdanAdar jayaKarthik jayabalan的stackoverflow id是什么?它关闭了错误消息。现在,APNS push在启动服务器后工作一段时间,然后在某个时间停止工作……worklight日志中没有任何错误或消息。重新启动的唯一方法是重新启动Worklight服务器。所以,同样的行为,只是信息更少:-(Hmmmm.使用javax.net.ssl.SSLHandshakeException,我们根本无法发送任何APN,解决方案解决了这个问题。听起来这是另一个单独的问题。根本没有引发异常?没有,行为根本没有改变。从一开始,我就能够在Worklight server启动后立即发送APN消息(不要问我它是如何工作的,我希望SSL问题也是一个完全的拦截器。但它是工作的)然后过了一段时间,APNS开始工作。唯一的区别是在JDK修复之前,我在日志中看到错误,现在什么都没有。@Samnunally要使用什么证书?@BalajiG JDK 6中的cacerts文件可以用来替换JDK 7中的cacerts文件。到目前为止,我相信这已经在最新版本的JDK 7 f中得到了修复rom IBM
 Replace jre\lib\security\cacerts file in JDK 7 with
 jre\lib\security\cacerts file in JDK 6