javax.net.ssl.SSLHandshakeException:收到致命警报:握手APN中的错误 [英] javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure Error in APN

查看:166
本文介绍了javax.net.ssl.SSLHandshakeException:收到致命警报:握手APN中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Java-pns向iPhone发送推送通知,但我收到以下错误...

I am trying to send push notification to iPhone using Java-pns but I am getting the following error...

javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

这是我的代码...

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 .... ");

对于 NotificationTest.verifyKeystore 我得到了此有效期是文件密钥库

For NotificationTest.verifyKeystore I am getting that this valid is File and Keystore.

我是不明白为什么我收到这个错误。

I am not understanding 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 am not understanding why Cert Authorities is empty?

推荐答案

发送推送通知到iPhone / iPad我使用了 JavaPNS

To Send Push Notification to iPhone/ iPad I have used JavaPNS.

它非常易于使用,对我有用。

It is very easy to use and It worked for me.

我们可以简单地按照 这个 可以使用它。

We can simply follow This to use it.

这篇关于javax.net.ssl.SSLHandshakeException:收到致命警报:握手APN中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆