iOS推送通知失败,原因是握手失败。

3
由于握手失败(handshake_failure)而失败,在我的本地机器上运行良好,但在服务器上部署时出现错误。 我正在使用apns-0.1.5.jar。
代码:
    static
    {
       service = APNS.newService()
            .withCert(ClassLoader.class.getResourceAsStream("cert.p12"), "pwd")
            .withSandboxDestination()
            .build();
    }


    public static void pushMSG(String msg,String deviceToken)
    {

      String payload = APNS.newPayload().alertBody(msg).build();

      AppLog.info("Message : "+msg+", deviceToken "+deviceToken);

      service.push(deviceToken, payload);

    }

错误日志

    com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
com.notnoop.apns.internal.Utilities.wrapAndThrowAsRuntimeException(Utilities.java:268)
com.notnoop.apns.internal.ApnsConnectionImpl.sendMessage(ApnsConnectionImpl.java:173)
com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:46)
com.notnoop.apns.internal.AbstractApnsService.push(AbstractApnsService.java:52)
com.notnoop.apns.internal.ApnsServiceImpl.push(ApnsServiceImpl.java:36)
com.gcash.notification.APNSManager.pushMSG(APNSManager.java:35)
com.gcash.TestServlet.doGet(TestServlet.java:58)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    root cause

    javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:136)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1720)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1138)
com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:632)

handshake_failure 是 SSL 的问题。请确保服务器上使用的证书是正确的。 - neilco
3
我发现问题出在我的证书文件路径上。因为 ClassLoader.class.getResourceAsStream("/WEB-INF/cert.p12") 返回 null。 - Arun Mohan
1个回答

1

我曾经也遇到过同样的问题,通过以下步骤解决了:

  1. 检查你的 .p12 文件和 .cer 文件。确保它们是相对应的。
  2. 你是否导出了 .p12 文件并直接在代码中使用它?如果是,请参考这个 答案。“我们应该从你的私钥和从苹果下载的证书生成一个 p12 文件。”

希望能解决你的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接