Ошибка SSL-сертификата: certificate_unknown

#iphone #push-notification #ssl-certificate #apple-push-notifications #provider

#iPhone #push-уведомление #ssl-сертификат #apple -push-уведомления #поставщик

Вопрос:

при создании поставщика push-уведомлений для разработчиков pr мы сталкиваемся с приведенной ниже ошибкой: я хочу узнать, что не так с сертификатом, потому что я включил push-уведомление, а затем создал сертификат, но я получаю ошибку certificate_unknown?

 main, RECV TLSv1 ALERT:  fatal, certificate_unknown
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
Error pushing notification(s):
Invalid certificate chain (Received fatal alert: certificate_unknown)!  Verify that the keystore you provided was produced according to specs...
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:359)
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:301)
      at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:258)
      at javapns.Push.payload(Push.java:122)
      at javapns.Push.alert(Push.java:36)
      at com.applicationname.pns.PushNotification.main(PushNotification.java:31)
  

// мой код, который я использую для push-уведомлений

 /**
 * 
 */
package com.applicationname.pns;

import org.json.JSONException;

import javapns.Push;
import javapns.devices.Device;
import javapns.notification.Payload;
import javapns.notification.PushNotificationManager;
import javapns.notification.PushNotificationPayload;


public class PushNotification
{
    private static final String HOST = "gateway.sandbox.push.apple.com";
    private static final int PORT = 2195;
    private static final int BADGE = 66;
    private static String iPhoneId = "5696ee2fa44c61fd21a7987d2b1bcf57faa1603e63cb57ff204b158fb90d28a3";
    private static String certificate = "D:/./trunk/Development/JavaPNS/src/com/applicationname/pns/privateKey.p12";
    private static String passwd = "password@1234";

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        Push.alert("Hello World!", certificate, passwd, false,iPhoneId);

        PushNotificationPayload payLoad = new PushNotificationPayload();

        try
        {
            payLoad.addAlert("Hello World!");
            payLoad.addBadge(10);
        }
        catch (JSONException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }


}
  

Комментарии:

1. Я добавил исходный код.

2. Вы получаете javax.net.ssl.SSLHandshakeException , но ваш код, похоже, не включает в себя какую-либо сеть. Вы уверены, что исключение возникает именно с тем кодом, который вы вставили?

Ответ №1:

Попробуйте загрузить открытый ключ вместо privatekey

 private static String certificate = "D:/./trunk/Development/JavaPNS/src/com/applicationname/pns/privateKey.p12";
  

Закрытый ключ загружается сокетом SSL на стороне сервера.

Ответ №2:

Вы должны обязательно следовать процедуре подготовки сертификатов, описанной на официальном веб-сайте JavaPNS. Разработчики, которые следуют этой процедуре, получают положительные результаты.

Ответ №3:

Я решил проблему в jdk 1.7 и с помощью p12, сразу после изменения длины пароля файла p12, большей или равной 6. В противном случае возникает следующая ошибка: [[1] не передается токену 595d8..725bf javapns.communication.exceptions.Исключение InvalidCertificateChainException: недопустимая цепочка сертификатов (получено фатальное предупреждение: certificate_unknown)! Убедитесь, что предоставленное вами хранилище ключей было создано в соответствии со спецификациями …]