Błąd certyfikatu SSL: nieznany certyfikat

11

Chcę utworzyć serwer powiadomień wypychanych, a podczas instalowania certyfikatu SSL i pliku .p12 na serwerze mamy do czynienia z poniższym błędem: Chcę wiedzieć, co jest nie tak z certyfikatem ssl, ponieważ pojawia się błąd certyfikatu nieznany.

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)

//kod źródłowy

    /**
     * 
     */
    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();
            }

        }


}
Użytkownik97693321
źródło
Próbuję tylko wiedzieć, czy ktoś inny stworzył serwer programowania powiadomień wypychanych, który może mi pomóc, jeśli czegoś brakuje.
User97693321,
Dałem te same certyfikaty „urbanairship” dostawcy usług powiadomień wypychanych, aby otrzymywać powiadomienia wypychane dla działającego środowiska programistycznego. Chcę więc zrobić to, co robię źle, aby utworzyć własny serwer powiadomień wypychanych?
User97693321,

Odpowiedzi:

9

Ładowanie klucza prywatnego jako żądania klienta do gniazda SSL jest niezwykłe. Osobiście uważam, że powinieneś ładować klucz publiczny. Klucz prywatny jest ładowany przez gniazdo SSL po stronie serwera. Jedynym powodem, dla którego potrzebujesz klucza prywatnego, jest działanie jak serwer i przyjmowanie połączeń z drugiego końca, ale nie robisz tego.

Może to wyjaśniać komunikat „certyfikat w złym formacie”.

W odniesieniu do:

private static String certificate = "D:/./trunk/Development/JavaPNS/src/com/applicationname/pns/privateKey.p12"
djangofan
źródło
6

Myślę, że błąd jest dość oczywisty, łańcuch certyfikatów nie weryfikuje właściwie certyfikatu. Być może brakuje Ci jednego lub kilku certyfikatów łańcuchowych potrzebnych do zweryfikowania ostatecznego certyfikatu końcowego?

Cokolwiek to jest, błąd daje bardzo wyraźną instrukcję: „Sprawdź, czy podany plik kluczy został utworzony zgodnie ze specyfikacjami ...”.

Nie ma nic, co można by dodać na tej stronie, oprócz przeczytania wiadomości o błędzie i zrobienia tego - nikt z nas nie ma kryształowych kul ani nie możemy w magiczny sposób rozwiązać twojego problemu.

Nie widzę sensu w zamieszczaniu pytania, w którym nie podajesz nam więcej informacji niż BARDZO wyraźny komunikat o błędzie, który mówi dokładnie, co robić. Wszystko, co możemy powiedzieć, to „zrób to, co mówi komunikat o błędzie!”

Bart B.
źródło