什么';Java APNS证书的正确格式是什么?

什么';Java APNS证书的正确格式是什么?,java,ios,macos,apple-push-notifications,javaapns,Java,Ios,Macos,Apple Push Notifications,Javaapns,我正在使用Java APNS(com.notnoop.APNS,v0.2.3)向我的iOS应用程序发送推送通知。我正在使用以下行创建APNS服务: private ApnsService createApnsService() throws IOException { ApnsServiceBuilder serviceBuilder = APNS.newService().withCert(certResource.getInputStream(), certPassword)

我正在使用Java APNS(com.notnoop.APNS,v0.2.3)向我的iOS应用程序发送推送通知。我正在使用以下行创建APNS服务:

private ApnsService createApnsService() throws IOException {
        ApnsServiceBuilder serviceBuilder = APNS.newService().withCert(certResource.getInputStream(), certPassword);
        serviceBuilder.withSandboxDestination();
        return serviceBuilder.build();
}
并接收以下异常:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is com.notnoop.exceptions.NetworkIOException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:647)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:728)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)...    <<...the stacktrace is much longer, but I've cut it of here, since nobody would read it anyway...>>

org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常为com.notnoop.exceptions.NetworkIOException:javax.net.ssl.SSLHandshakeException:收到致命警报:握手失败\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:948)\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:647)\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:728)\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 今年早些时候,我根据本教程创建了它,它工作得非常好

首先,请遵循以下原则:

然后获取创建的.pem,然后按照此处的说明进行转换

我使用PKCS#12(一个.p12文件)。要创建它,我需要:

  • 从密钥链导出私钥并将其命名为aps\u private-key.p12
  • final InputStream certificate = Thread.currentThread().getContextClassLoader()
            .getResourceAsStream("aps_dev_credentials.p12");
    final char[] passwd = {'1','2','3','4'};
    final ApnsService apnsService = com.notnoop.apns.APNS.newService()
            .withCert(certificate, new String(passwd))
            .withSandboxDestination().build();
    apnsService.testConnection();
    
  • 使用以下命令转换密钥
    openssl pkcs12-nocerts-out aps_private-key.pem-在aps_private-key.p12中,确保输入至少4个字符的pem密码短语

  • 从下载应用程序的证书。下载的文件应称为类似于
    aps\u development.cer

  • 使用以下命令转换证书
    opensslx509-in-aps\u development.cer-notify der-out-aps\u development.pem

  • 使用
    openssl pkcs12-export-in-aps\u development.pem-out-aps\u dev\u credentials.p12-inkey-aps\u private-key.pem
    生成凭据

  • 我已经准备好使用步骤5中生成的凭据(
    aps\u dev\u credentials.p12


  • 今年早些时候,我根据本教程创建了它,它工作得非常好。使用Java APN还是教程中提到的PHP?因为在本教程中,他们使用的是PEM证书,由于Java APN的文档,您应该使用P12证书。创建了PEM,然后进行转换,按照这里的说明,我使用了Java APN和基于PHP的证书solutions@JohnWoods谢谢你的链接。您的PKCS12证书解决方案有效。当你创建这个答案时,我会将它标记为正确答案。