Какой правильный формат для сертификата Java APNS?

Я использую Java APNS (com.notnoop.apns, v0.2.3) для отправки Push-уведомлений в мое приложение 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...>>

Я предполагаю, что мой сертификат P12 неверен. (Я также уже пробовал сертификат PEM.) На данный момент я создал сертификат P12 таким образом, а затем применил пароль:

Снимок экрана Keychain.app


Как правильно создать сертификат, совместимый с Java APNS?

2 ответа

Решение

Я создал его согласно этому уроку ранее в этом году, и он работал отлично.

Сначала следуйте этому: http://raywenderlich.com/32960

Затем возьмите созданный.pem, а затем выполните преобразование в соответствии с инструкциями здесь http://code.google.com/p/apns-sharp/wiki/HowToCreatePKCS12Certificate

Я использую PKCS#12 (файл.p12). Для его создания я делаю:

  1. Экспортируйте закрытый ключ из брелка и назовите его aps_private-key.p12,

  2. Преобразовать ключ с помощью следующей командыopenssl pkcs12 -nocerts -out aps_private-key.pem -in aps_private-key.p12, убедитесь, что вводите PEM пароль не менее 4 символов.

  3. Загрузите сертификат приложения с https://developer.apple.com/account/ios/identifiers/bundle/bundleList.action. Загруженный файл должен называться как-то так aps_development.cer,

  4. Преобразуйте сертификат с помощью следующей команды openssl x509 -in aps_development.cer -inform der -out aps_development.pem

  5. Генерация учетных данных с использованием openssl pkcs12 -export -in aps_development.pem -out aps_dev_credentials.p12 -inkey aps_private-key.pem,

  6. И я готов использовать учетные данные, сгенерированные на шаге 5 (aps_dev_credentials.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();
    
Другие вопросы по тегам