Ich möchte einen Push-Benachrichtigungsserver erstellen und während der Installation des SSL-Zertifikats und der P12-Datei auf dem Server tritt der folgende Fehler auf: Ich möchte wissen, was mit dem SSL-Zertifikat nicht stimmt, da der Fehler "certificate_unknown" angezeigt wird.
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)
//Quellcode
/**
*
*/
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();
}
}
}
Antworten:
Es ist ungewöhnlich, den privaten Schlüssel als Client-Anforderung in einen SSL-Socket zu laden. Ich persönlich denke, Sie sollten den öffentlichen Schlüssel laden. Der private Schlüssel wird vom SSL-Socket auf der Serverseite geladen. Der einzige Grund, warum Sie den privaten Schlüssel benötigen würden, besteht darin, sich wie ein Server zu verhalten und Verbindungen vom anderen Ende zu akzeptieren, aber das scheinen Sie nicht zu tun.
Dies könnte die Meldung "Zertifikat im falschen Format" erklären.
In Bezug auf:
quelle
Ich denke, der Fehler ist ziemlich offensichtlich, Ihre Zertifikatskette überprüft Ihr Zertifikat nicht richtig. Vielleicht fehlen Ihnen eines oder mehrere der Verkettungszertifikate, die zur Überprüfung Ihres endgültigen Endzertifikats erforderlich sind?
Was auch immer es ist, der Fehler gibt Ihnen die sehr klare Anweisung "Überprüfen Sie, ob der von Ihnen bereitgestellte Schlüsselspeicher gemäß den Spezifikationen erstellt wurde ...".
Es gibt nichts, was jemand auf dieser Website hinzufügen kann, außer zu lesen, was Ihre Fehlermeldung sagt, und dies zu tun - keiner von uns hat Kristallkugeln, noch können wir Ihr Problem auf magische Weise beheben.
Ich sehe keinen Sinn darin, eine Frage zu stellen, in der Sie uns nur eine SEHR klare Fehlermeldung geben, die Ihnen genau sagt, was zu tun ist. Wir können nur sagen: "Tu, was in der Fehlermeldung steht!"
quelle