6

I have the following code:

package daoImp;

import java.util.List;

import javapns.Push;
import javapns.communication.exceptions.KeystoreException;
import javapns.notification.PushedNotification;
import javapns.notification.ResponsePacket;
import org.json.JSONException;
import com.sun.jmx.snmp.daemon.CommunicationException;

public class Notification {

    public static void main(String args[]) {
        try {
            new Notification().sendMessageToAPN();
        } catch (CommunicationException | KeystoreException | JSONException
                | javapns.communication.exceptions.CommunicationException e) {
            e.printStackTrace();
        }
    }

    public void sendMessageToAPN() throws CommunicationException,
            KeystoreException, JSONException,
            javapns.communication.exceptions.CommunicationException {
        String regId1 = "6f9d340ab4d0f81206f7d8c1ab7b8994d90d139e0d1d2b99999b02887e60d54f";
        List<PushedNotification> notifications = Push.alert("hello","C:/Program Files (x86)/Java/jdk1.7.0_21/jre/lib/security/gameover.p12", "gameover",
                false, regId1);
        for (PushedNotification notification : notifications) {
            if (notification.isSuccessful()) {
                System.out.println("Push notification sent successfully to: " + notification.getDevice().getToken());

            } else {
                String invalidToken = notification.getDevice().getToken();
                System.err.println("Invalid Token " + invalidToken);

                System.out.println(" The problem was");
                Exception theProblem = notification.getException();
                theProblem.printStackTrace();

                ResponsePacket theErrorResponse = notification.getResponse();
                if (theErrorResponse != null) {
                    System.out.println(theErrorResponse.getMessage());
                }
            }
        }
    }
}

When I run the code, I get the following exception message: handshake to ssl failed as connection to remote host failed during handshake.

log4j:WARN No appenders could be found for logger (javapns.notification.Payload).
log4j:WARN Please initialize the log4j system properly.
Invalid Token 6f9d340ab4d0f81206f7d8c1ab7b6774d90d139e0d1d2b58599b02887e60d54f
 The problem was
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at sun.security.ssl.AppOutputStream.write(Unknown Source)
    at java.io.OutputStream.write(Unknown Source)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:402)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:350)
    at javapns.notification.PushNotificationManager.sendNotification(PushNotificationManager.java:320)
    at javapns.Push.sendPayload(Push.java:177)
    at javapns.Push.alert(Push.java:47)
    at daoImp.Notification.sendMessageToAPN(Notification.java:27)
    at daoImp.Notification.main(Notification.java:16)
Caused by: java.io.EOFException: SSL peer shut down incorrectly
    at sun.security.ssl.InputRecord.read(Unknown Source)
    ... 12 more

I don't know why I'm getting this message.

3 Answers 3

9
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Caused by: java.io.EOFException: SSL peer shut down incorrectly

Above Exception is a generic exception we get in the client if there is any of below scenario:

  • If Server and Client support different version of TLS e.g. server support TLS2 while Client support only TLS1. This issue can be resolved by setting below property in Client side :

System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");

  • If the server is not able to validate the certificate chain of the client, then also it will close the conection.

Certificate chain qtp510727907-31, fatal error: 42: null cert chain javax.net.ssl.SSLHandshakeException: null cert chain %% Invalidated: [Session-3, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA]
qtp510727907-31, SEND TLSv1 ALERT: fatal, description = bad_certificate qtp510727907-31, WRITE: TLSv1 Alert, length = 2
main, WRITE: TLSv1 Change Cipher Spec, length = 1 qtp510727907-31, fatal: engine already closed. Rethrowing
javax.net.ssl.SSLHandshakeException: null cert chain

To know the exact cause of failure, we need to enable -Djavax.net.debug=all while executing the client call towards the server.

Sign up to request clarification or add additional context in comments.

Comments

1

This issue occurs because of Internet connection problem/poor internet connection. Please check your internet connectivity.

Comments

0

I believe you are missing your certificates.

You can generate them using the InstallCerts app. (http://miteff.com/install-cert)

or http://opentox.ntua.gr/blog/77-ssl-certificates

Once you get your certificate, you need to put it under your security directory within your jdk home, for example:

C:\Program Files\Java\jdk1.6.0_45\jre\lib\security

Hope this resolves your issue

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.