我试图使用Java的PNS推送通知发送到iPhone,但我收到以下错误- javax.net.ssl.SSLHandshakeException:收到致命警报: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我得到这个有效的文件和密钥库。
我不理解为什么我收到此错误。
请任何人能帮助我吗?
提前致谢 ...
在我的日志我已经看到,
** CertificateRequest
证书类型:RSA,DSS,ECDSA
证书颁发机构:
[读] MD5和SHA1哈希:LEN = 10
0000:0D 00 00 06 03 01 02 40 00 00 ...... @ ..
** ServerHelloDone
[读] MD5和SHA1哈希:LEN = 4
0000:0E 00 00 00 ....
**证书链
**
** ClientKeyExchange,RSA PreMasterSecret,使用TLSv1
[写] MD5和SHA1哈希:LEN = 269
。
。
。
。
。
主,READ:使用TLSv1异动,长度= 2
主,RECV的TLSv1警告:致命的,handshake_failure
主,被叫则closesocket()
主,处理异常:javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
我不理解为什么当局证书:是空的?