1

我有来自新项目中定义的示例推送通知的 PushAdapter,并且我已将 apns-certificate-sandbox.p12 添加到本机 api 应用程序(本机 api),在应用程序描述符中添加了正确的 bundleId 值.xml,但是,我不断收到此错误:

[WARNING ] Failed to retreive invalid devices
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
[ERROR   ] Couldn't get feedback connection
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
[ERROR   ] Unknown exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Unknown exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown

这是 Worklight (6.0.0.20130909-1459) 的新安装,我尝试了两种单独的安装(一个在 Eclipse 中,一个在 RAD 中),都出现相同的错误。

是否需要做一些额外的工作才能在 Worklight Development Server (Websphere Liberty) 环境中进行推送测试以使 SSL 正常工作?尚未订阅任何设备,但不确定为什么会发生此错误或是否相关。

详细的跟踪在这里:

[11/1/13 11:50:20:834 EDT] 00000034 com.worklight.core.exceptions.InstrumentedException          E Unknown exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
com.worklight.core.exceptions.InstrumentedException: Unknown exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at com.worklight.core.exceptions.DefaultExceptionHandler.handleException(DefaultExceptionHandler.java:56)
    at com.worklight.core.tasks.TaskThread.run(TaskThread.java:113)
Caused by: java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at com.notnoop.apns.internal.Utilities.parseFeedbackStreamRaw(Utilities.java:201)
    at com.notnoop.apns.internal.Utilities.parseFeedbackStream(Utilities.java:211)
    at com.notnoop.apns.internal.ApnsFeedbackConnection.getInactiveDevicesImpl(ApnsFeedbackConnection.java:87)
    at com.notnoop.apns.internal.ApnsFeedbackConnection.getInactiveDevices(ApnsFeedbackConnection.java:67)
    at com.notnoop.apns.internal.AbstractApnsService.getInactiveDevices(AbstractApnsService.java:99)
    at com.notnoop.apns.internal.ApnsServiceImpl.getInactiveDevices(ApnsServiceImpl.java:36)
    at com.worklight.integration.notification.apns.ApplicationConnection.getInactiveDevices(ApplicationConnection.java:110)
    at com.worklight.integration.notification.apns.APNSMediator.maintain(APNSMediator.java:95)
    at com.worklight.integration.notification.Dispatcher.maintain(Dispatcher.java:148)
    at com.worklight.integration.notification.NotificationCleanupTask.step(NotificationCleanupTask.java:29)
    at com.worklight.core.tasks.TaskThread.run(TaskThread.java:111)
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
    at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1961)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1077)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:882)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102)
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:69)
    at java.io.DataInputStream.readInt(DataInputStream.java:387)
    at com.notnoop.apns.internal.Utilities.parseFeedbackStreamRaw(Utilities.java:192)
    ... 10 more
4

3 回答 3

2

这看起来像是来自服务器尝试测试与 Apple 推送/反馈服务的连接的错误。

有几件事要检查:

  1. 应用程序是为开发还是分发而构建的?
  2. 如果是开发,请确保您使用的是开发 SSL 证书。将证书和私钥都导出到名为:apns-certificate-sandbox.p12 的文件中
  3. 如果分发,请确保您使用的是生产 SSL 证书。将证书和私钥都导出到名为:apns-certificate-production.p12 的文件中
  4. 确保正确创建了 .p12 文件,并且您在应用程序描述符文件中指定了相应的密码。
  5. 确保您的 Worklight 服务器可以访问 APNs 主机/端口以进行推送和反馈服务。ie防火墙端口需要为以下打开:
    • gateway.push.apple.com,端口 2195
    • gateway.sandbox.push.apple.com,端口 2195
    • feedback.push.apple.com,端口 2196
    • 端口 2196 上的 feedback.sandbox.push.apple.com
于 2013-11-07T21:15:22.147 回答
1

Worklight 产品从未使用http://code.google.com/p/javapns进行推送,它使用的是 com.notnoop.apns 。该软件包适用于 Oracle JDK 1.6 和 1.7 您能否进一步了解您使用的是哪个 JDK 版本?我在嵌入式 Liberty+Oracle JDK 1.7_07b +iPhone 5 上测试了推送示例,它工作正常。您是如何创建此证书的?你能在这里一步一步地写下你做了什么吗?(并指定您复制的每个文件,以这种方式编辑)

如果您询问是否使用 javaPNS:当然,由于它是一个开放框架,您可以手动将任何 jar 复制(并使用)到您的 Worklight 项目中作为第 3 方依赖项,但是,这个 javaPNS jar 似乎有一些 SSL 错误。

您为什么不查看 Worklight 的推送通知示例并从那里开始工作 ( http://www.ibm.com/developerworks/mobile/worklight/getting-started.html#client-basics )?(Worklight 附带一个有效的推送通知解决方案,可在 JDK1.6 或 1.7 上运行,您的 PKCS12 证书不会出现问题)

于 2013-11-06T08:20:27.803 回答
0

就我而言,已经证实在 OS X 中(实际上有时也在 Windows 中),使用 JRE 7 而不是 JRE 6 时会引发 certificate_unknown 错误。似乎notnoopWorklight 中使用的开源库不能很好地处理 Java 7。

https://github.com/notnoop/java-apns/issues/54

于 2014-02-20T18:25:40.290 回答