I am trying to send a push notification to iPhone using Java-pns, but I am getting the following error ...
javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
This is my code ...
String token="95076d2846e8979b46efd1884206a590d99d0f3f6139d947635ac4186cdc5942"; String host = "gateway.sandbox.push.apple.com"; int port = 2195; String payload = "{\"aps\":{\"alert\":\"Message from Java o_O\"}}"; NotificationTest.verifyKeystore("res/myFile.p12", "password", false); KeyStore keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(getClass().getResourceAsStream("res/myFile.p12"), "password".toCharArray()); KeyManagerFactory keyMgrFactory = KeyManagerFactory.getInstance("SunX509"); keyMgrFactory.init(keyStore, "password".toCharArray()); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(keyMgrFactory.getKeyManagers(), null, null); SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); SSLSocket sslSocket = (SSLSocket) sslSocketFactory.createSocket(host, port); String[] cipherSuites = sslSocket.getSupportedCipherSuites(); sslSocket.setEnabledCipherSuites(cipherSuites); sslSocket.startHandshake(); char[] t = token.toCharArray(); byte[] b = Hex.decodeHex(t); OutputStream outputstream = sslSocket.getOutputStream(); outputstream.write(0); outputstream.write(0); outputstream.write(32); outputstream.write(b); outputstream.write(0); outputstream.write(payload.length()); outputstream.write(payload.getBytes()); outputstream.flush(); outputstream.close(); System.out.println("Message sent .... ");
For NotificationTest.verifyKeystore I get that this value is equal to File and Keystore .
I do not understand why I am getting this error.
This is my error log ...
** CertificateRequest Cert Types: RSA, DSS, ECDSA Cert Authorities: <empty> [read] MD5 and SHA1 hashes: len = 10 0000: 0D 00 00 06 03 01 02 40 00 00 .......@.. ** ServerHelloDone [read] MD5 and SHA1 hashes: len = 4 0000: 0E 00 00 00 .... ** Certificate chain ** ** ClientKeyExchange, RSA PreMasterSecret, TLSv1 [write] MD5 and SHA1 hashes: len = 269 ... main, READ: TLSv1 Alert, length = 2 main, RECV TLSv1 ALERT: fatal, handshake_failure main, called closeSocket() main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
I donβt understand why certification bodies are empty?
source share